https://www.acmicpc.net/problem/1654
문제 해결을 위한 과정
이 문제의 경우 이분 탐색을 이용하면 해결할 수 있는 문제였습니다. 다만 mid = left + right // 2 이렇게 만들어진 mid로 나누는 과정에서 런타임 에러 (ZeroDivisionError)를 받을수 가 있습니다. 따라서 항상 변수로 나누는 경우는 그 변수가 zero가 될 수 있는지 가능성을 확인해보아야 합니다.
소스코드
n, k = map(int, input().split())
arr = []
for _ in range(n):
arr.append(int(input()))
arr.sort()
left = 1
right = arr[n-1]
ans = 0
while True:
if left > right:
break
mid = (left + right) // 2
cnt = 0
for i in range(n):
cnt += arr[i] // mid
if cnt >= k:
ans = max(ans, mid)
left = mid + 1
else:
right = mid - 1
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
백준 알고리즘 2792: 보석 상자 (Python) (0) | 2024.04.24 |
---|---|
백준 알고리즘 2805: 나무 자르기 (Python) (0) | 2024.04.24 |
백준 알고리즘 16953: A->B (Python) (0) | 2024.04.23 |
백준 알고리즘 2217: 로프 (Python) (0) | 2024.04.22 |
백준 알고리즘 2294: 동전 2 (Python) (0) | 2024.04.22 |