본문 바로가기

코딩테스트/백준

(35)
[Python] 백준 2805. 나무자르기 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 문제 설명: 상근이가 얻으려는 나무의 길이 M , 나무의 수 N M을 얻기 위해 절단기로 자를 수 있느 나무의 최대 높이값을 구하는 문제 만약 4개의 나무 [20, 15, 10, 17]이 주어질때 7미터 얻으려고 할때 15미터로 설정하고 자르면 [0,0,5,2] 7미터를 얻을 수 있다. 이진탐색으로 풀 수 있지만 조금 방법을 바꿔보고 싶었다. 나무의 리스트를..
[Python] 백준 1654. 랜선 자르기 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 설명: 만약 4개의 랜선이 주어지고 11개의 랜선을 만들려고 할 때 최대 길이 갯수를 구하는 문제이다. 4개의 랜선은 예를 들면 [802, 743, 457, 539] 랜선의 길이가 주어진다. 최대 길이가 200일때 802cm 랜선에서 4개, 743cm 랜선에서 3개, 457cm 랜선에서 2개, 539cm 랜선에서 2개를 잘라내 모두 11개를 만들 수 있다. 이진탐..
[Python] 백준 9095번. 1,2,3 더하기 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 정수 n 에 대해 1,2,3으로 합을 만들 수 있는 경우의 수를 구하는 문제이다. 여기서 주의: 1이 처음 빠진다고 해서 두번째에도 1이 들어 갈 수 있다. for문을 n이 0이 될때까지 돌려주면 된다. 반복되는 과정이기 때문에 재귀함수로 구현가능 def sum(n): def dfs(n, arr): for i in [1,2,3]: if n-i == 0: result.append(arr+[i]) return else: dfs(n-i, arr+[i]) result = [] dfs(n, []) ret..
[Python] 백준 1795번. 암호 만들기 https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 문제: 주어진 문자를 가지고 L자리 비밀번호를 조합하여 비밀번호를 풀려고 한다. 주의 할 점은 비밀번호 조합에는 최소 하나의 모음과, 최소 두개의 자음을 포함하고 있어야 한다. 문자가 4개 만들어지면 반환하도록 한다. 입력받은 문자열은 정렬이 되어야 한다. 출력결과를 보면 문자가 오름차순으로 정렬이 된 것으로 보인다. 결국 첫번째 자리 < 두번째 자리 < 세번째 자리 < 네번째 자리순으로 정렬되어야 한..
[Python] Recursive(재귀함수) 1. 팩토리얼 구하기 재귀함수를 배울때 가장 대표적인 문제 def factorial(num:int): if num == 1: return num sum = num * factorial(num -1) return sum factorial(4) 실행 시 4* factorial(3) 호출 factorial(3) -> 3 * factorial(2) factorial(2) -> 2 * factorial(1) factorial(1) -> 1 반환 2 * 1 3 * (2 * 1) : 반환된 2 * 1 4 * 3 * 2 * 1 : 반환된 3 * 2 * 1
[Python] 백준 17219. 비밀번호 찾기 https://www.acmicpc.net/problem/17219 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 문제가 직관적이라고 생각한다. 웹사이트에 맞는 비밀번호를 찾는 것이다. dict을 이용하면 쉽게 풀릴 문제라고 생각해서 dict으로 한 번 풀어본다. * 딕셔너리를 만들때 컬렉션에 나와있는 defaultdict 함수를 사용해보겠다. pwbook = collections.defaultdict(str) * 웹사이트와 비밀번호를 입력을 받을때 딕셔너리에 없다면 값을 추가해..
[Python] 백준 1920. 수 찾기 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 문제설명 [4,1,5,2,3] 입력받은 리스트가 있고 다른 리스트 [1,3,7,9,5] 가 있다고 했을 때 [4, 1, 5, 2, 3] 각각의 숫자들이 두번째 리스트에 들어있는지 확인하는 문제이다. 이 문제는 정말 쉽게 풀거라고 생각했다. n = int(input()) lst = list(map(int, input().split())) m = int..
[Python] 백준 1966번. 프린터 큐 https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 문제 설명: 우선순위가 가장 높은 순서인 게시물이 가장 앞에 있으면 꺼내준다. 이때 카운터를 해줘야 한다. 만약 우선순위가 높지 않은데 가장 앞에 있다면 뒤로 보내준다. 내가 찾아야 할 우선순위가 나오면 카운터를 증가해주고 꺼내준다. 처음 헤맨것은 왜 이렇게 입력을 받는거지? 가장 처음 몇 개의 case인지 알았고 1 0 -> 한장의 카드가 있고 0번째에 놓여있는지를 나타내고 있다. 그 이후로 이해가..