728x90
K, N = map(int, input().split())
N_list = [int(input()) for _ in range(K)]
result = 0
s, e = 1, max(N_list)
while s <= e:
m = (s + e) // 2
key = sum([num // m for num in N_list])
if key < N: # => m의 값이 큰경우 => m을 줄이는 방향
e = m - 1
else:
s = m + 1
result = max(result, m) # 랜선의 최대 길이를 찾아야 하므로
print(result)
이분탐색을 하면서 가장 큰 크기를 탐색하는 문제이다.
처음에 문제를 이해하기 힘들어서 이게 왜 이분 탐색이지 하는 생각이 들었다.
머리로는 이해는 가는데 뭔가 설명하긴 어려운 문제다...
s = 0로 초기화하면 zerodivisionError가 발생한다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1920 수찾기 python (0) | 2021.04.28 |
---|---|
[백준] 1874 스택수열 python (0) | 2021.04.28 |
[백준] 1504 특정한 최단 경로 python (0) | 2021.04.27 |
[백준] 1707 이분 그래프 python (0) | 2021.04.27 |
[백준] 2178 미로 탐색, python, C (0) | 2021.04.27 |