여니의 취준 준비/코딩테스트 (Python)

[1654] 랜선 자르기 in python

여니's 2022. 3. 7. 21:45

> 이분탐색

 

 

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 

 

[2792] 보석상자 in python

> 이분탐색 평소에는 이분탐색을 풀 때 cnt==n일때, cnt cnt>n일때 각각 조건을 나눠 계산을 진행해줬다. 그러나 이번 문제처럼 최솟값이나 혹은 최댓값을 구할 땐 위 방식보다는 아래 코드와 같이

eboong.tistory.com