본문 바로가기

나동빈 with 파이썬/실전문제 풀이21

[Ch. 8 - 다이나믹 프로그래밍] 1로 만들기 My code x = int(input()) d = [0] * 30001 for i in range(2, x + 1): d[i] = d[i - 1] + 1 if i % 2 == 0 : d[i] = min(d[i], d[i//2] + 1) if i % 3 == 0: d[i] = min(d[i], d[i//3] + 1) if i % 5 == 0: d[i] = min(d[i], d[i//5] + 1) print(d[x]) Code Review 이번 문제는 다음과 같은 4 가지 연산을 수행하여 1을 만들 때 연산을 사용하는 횟수의 최솟값을 출력하는 문제였습니다. -x 가 5로 나누어 떨어지면, 5로 나눈다. -x 가 3으로 나누어 떨어지면, 3으로 나눈다. -x 가 2로 나누어 떨어지면, 2로 나눈다. -x 에.. 2022. 2. 16.
[Ch.7 - 이진 탐색] 떡볶이 떡 만들기 My code n, m = map(int,input().split()) array = list(map(int,input().split())) start = 0 end = max(array) result = 0 while start mid: total += x - mid if total < m: end = mid - 1 else: result = mid start = mid + 1 print(result) Code Review 이번 문제는 손님이 요청한 떡의 길이가 m 일 때 적어도 m 만큼의 떡을 얻기 위해 절단기에 설정할 수 있는 높이의 최댓값을 구하는 문제였습니다. 이 문제는 이진 탐색 알고리즘을 이용하여 해결할 수 있습니다. 먼저 시작 값을 0, 마지막 값을 입력 받은 길이의 최대값으로 설정한 후 .. 2022. 2. 15.
[Ch.7 - 이진 탐색] 부품 찾기 My code def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 if array[mid] == target: return mid elif array[mid] > target: return binary_search(array, target, start, mid - 1) else: return binary_search(array, target, mid + 1, end) n = int(input()) array = list(map(int,input().split())) array.sort() m = int(input()) needs = list(map(int,input().split(.. 2022. 2. 15.
[Ch.6 - 정렬] 두 배열의 원소 교체 My code n, k = map(int,input().split()) a = list(map(int,input().split())) b = list(map(int,input().split())) a.sort() b.sort() tmp = n for i in range(k): if a[i] < b[tmp-1]: a[i], b[tmp-1] = b[tmp-1], a[i] tmp -= 1 else: break print(sum(a)) Answer n, k = map(int,input().split()) a = list(map(int,input().split())) b = list(map(int,input().split())) a.sort() b.sort(reverse = True) for i in range(.. 2022. 2. 13.