1654. 랜선 자르기
- 내 풀이
- 랜선 최소 길이가 1부터 인것 주의
- 2792. 보석상자랑 거의 똑같은 문제
- ⚠️ 계산 과정에서 다르게 생각해야 할점
- tmp를 구하는 과정이 2792는 math.ceil로 0.5도 1인으로 치면서 계산했다면
- 1654는 남는 랜선을 자르는 방식이어서 lan//mid 몫으로만 계산한다는 차이가 있음
- ⚠️ 계산 과정에서 다르게 생각해야 할점
- 구해야 하는 값을 이분탐색으로 범위를 좁혀나가면서 되는지 확인해보는 것
k, n = map(int, input().split())
lans = []
for _ in range(k):
lans.append(int(input()))
l = 1 #랜선 최소 길이 0으로 하면 에러
r = max(lans)
ans = 0
while l <= r:
mid = (l+r)//2
tmp = 0
for lan in lans:
tmp += lan//mid
if tmp < n:
r = mid-1
continue
ans = max(ans, mid)
l = mid+1
print(ans)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][백트래킹] 2529. 부등호 (0) | 2024.10.01 |
|---|---|
| [백준][이분 탐색][매개변수 탐색] 2110.공유기 설치 (0) | 2024.09.09 |
| [백준][누적합] 14453. Hoof, Paper, Scissors (Silver) (0) | 2024.08.27 |
| [백준][누적합] 3020.개똥벌레 (0) | 2024.08.27 |
| [백준][구현] 14719. 빗물 (0) | 2024.08.25 |