문제 링크
https://www.acmicpc.net/problem/1654
start를 1, end를 lan 배열에서 가장 긴 길이로 하였다.
amount와 목표로 하는 개수 N이 같아지면, start와 end의 값이 같아지게 된다.
만약 52cm를 두개로 자르려 할 때, 25cm도 2개, 26cm도 2개이다. 이 문제는 최대 길이를 출력하는 것이므로, end를 결과로 출력해야 한다.
정답 코드
import sys
K, N = map(int, sys.stdin.readline().split())
lan = []
for i in range(K):
lan.append(int(sys.stdin.readline()))
start, end = 1, max(lan)
while start <= end:
mid = (start + end) // 2
amount = 0
for l in lan:
amount += l // mid
if amount >= N:
start = mid + 1
else:
end = mid - 1
print(end)
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 2110번 파이썬 (1) | 2022.09.21 |
---|---|
Baekjoon Online Judge 2805번 파이썬 (1) | 2022.09.19 |
이진 탐색 (0) | 2022.09.13 |
Baekjoon Online Judge 1967번 파이썬 (1) | 2022.09.07 |
Baekjoon Online Judge 1167번 파이썬 (0) | 2022.09.04 |