본문 바로가기

분류 전체보기121

[백준] 2805번 나무 자르기 import sys n,m = map(int, sys.stdin.readline().split()) array = list(map(int, sys.stdin.readline().split())) start = 0 end = max(array) while start 0: result += i - mid if result < m: # 필요한 길이보다 result가 작으므로, 잘린 나무가 더 길어져야 한다. end = mid - 1 else: start = mid + 1 print(end) 입출력은 동일했으나, 시간초과 결과가 나왔다. import sys n,m = map(int, sys.stdin.readline().split()) array = list(map(int, sys.stdin.readline().. 2023. 7. 25.
[백준] 1654번 랜선 자르기 이진 탐색을 이용해서 랜선이 조건을 만족하는 최대 길이를 구해야 한다. N개의 랜선을 만들어야 하므로, mid를 기준으로 랜선을 자를때 나오는 count값을 세어서, count 값이 N개의 값보다 더 크다면, 더 랜선의 길이를 늘릴 수 있으므로, start = mid + 1로 조건을 바꾼다. count 값이 N개의 값보다 더 작다면, 랜선의 길이를 줄여야 하므로, end = mid - 1로 조건을 바꾼다. k, n = map(int, input().split()) array =[] for i in range(k): array.append(int(input())) start = 1 end = max(array) while(start = n: start = mid + 1 else: end = mid - 1 .. 2023. 7. 24.
다이나믹 프로그래밍 개념 한번 계산한 문제는 다시 계산하지 않도록 하는 알고리즘으로, 피보나치 수열이 다이나믹 프로그래밍으로 해결할 수 있는 대표적인 예시이다. 피보나치 수열의 점화식을 재귀 함수를 이용해 만들 수는 있지만, 단순히 매번 계산하도록 하면 문제를 효율적으로 해결할 수 없다. 이러한 문제는 다이나믹 프로그래밍을 사용하면 효율적으로 해결할 수 있다. 다이나믹 프로그래밍은 조건은 이렇다. 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 다이나믹 프로그래밍 적용 안한 케이스 def fibo(x): if x==1 or x==2: return 1 return fibo(x-1) + fibo(x-2) print(fibo(4)) 다이나믹 프로그래밍 적용한 케이스.. 2023. 7. 23.
파이썬 입력 받기 sys.stdin.readline() 반복문으로 여러번 입력을 받아야 하는 경우, input()을 사용하면 시간 초과가 날 수 있다. 이런 상황에서는 반드시 sys.stdin.readline()을 사용해야 한다. ◈ sys.stdin.readline() 사용법 sys.stdin.readline()은 한 줄 단위로 받기 때문에, 개행 문자가 같이 입력된다. ▶ 한 개의 정수를 입력받을 때 import sys a = int(sys.stdin.readline()) ▶ 정해진 개수의 정수를 한 줄에 입력 받을 때 import sys a, b, c = map(int,sys.stdin.readline().split()) ▶ 임의의 개수의 정수를 한 줄에 입력받아 리스트에 저장할 때 import sys data = list(map(int, sys.std.. 2023. 7. 23.