> 이분탐색
https://www.acmicpc.net/problem/1654
k, n = map(int, input().split())
array = [int(input()) for _ in range(k)]
left = 1
right = max(array)
result=0
while left <= right:
mid = (left + right) // 2
cnt = 0
for num in array:
cnt += num // mid # 랜선 개수 더하는 과정
if cnt<n: # 기준이 되는 랜선의 길이를 줄여야 n개의 랜선을 만들 수 있다.
right=mid-1
else: # 만약 원하는 개수의 랜선을 만들 수 있다면?
left=mid+1 # 최대의 랜선을 원하는거니까 랜선의 길이를 늘린다.
result=max(result,mid) # 최대의 랜선은 max 함수로 !
print(result)
위 문제와 비슷한 내용!
그래서 쉽게 풀 수 있었음.
https://eboong.tistory.com/486?category=909716
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[22871] 징검다리 건너기 (large) in python (1) | 2022.03.08 |
---|---|
[11663] 선분 위의 점 in python (0) | 2022.03.08 |
[11657] 타임머신 in python (0) | 2022.03.07 |
[4803] 트리 in python (0) | 2022.03.07 |
[15681] 트리와 쿼리 (0) | 2022.03.07 |