문제 : https://www.acmicpc.net/problem/1654
▶ 이분탐색 조건1 : while (low <= high): ...
▶ 이분탐색 조건2 : low와 high의 초기값을 문제의 조건에 맞게 잘 설정해주자.
▶ 코드
n, k = map(int, input().split()) # 문제의 조건: 항상 N<=K
lst = []
for _ in range(n):
lst.append(int(input()))
low = 1 # 시작을 1로 해야됨 !! (0으로 해버리면 mid로 나누는 부분에서 Error될 수 있음)
high = max(lst)
ans = -1
while low<=high: # 이분탐색 조건 !!
mid = (low + high) // 2
#print(low, mid, high)
sum_val = 0
for a in lst:
sum_val += a//mid
if sum_val >= k: # k개 '이상' 이라면..(=문제의 조건)
ans = mid # mid값으로 ans를 업데이트 해나간다.
low = mid+1
else:
high = mid-1
print(ans)
'■코테 중요개념 > 이분 탐색' 카테고리의 다른 글
[백준 10816] 숫자 카드 2 (0) | 2020.05.18 |
---|---|
[백준 10815] 숫자 카드 (0) | 2020.05.17 |
[백준 1620] 나는야 포켓몬 마스터 이다솜 (0) | 2020.05.17 |
[백준 1920] 수 찾기 (0) | 2020.05.17 |