문제 링크
2805: 나무 자르기
구현 방식
코드
import sys
N, M = map(int, sys.stdin.readline()[:-1].split())
tree = list(map(int, sys.stdin.readline()[:-1].split()))
start = 1; end = max(tree)
while start <= end:
mid = (start+end)//2
sum_ = 0
for t in tree:
if t > mid: sum_ += t - mid
if sum_ >= M: start = mid + 1
else: end = mid - 1
print(end)
문제 링크
1654: 랜선 자르기
구현 방식
코드
import sys
K, N = map(int, sys.stdin.readline()[:-1].split())
LAN = [int(sys.stdin.readline()[:-1]) for k in range(K)]; LAN.sort()
left, right = 1, max(LAN)
while left <= right:
mid = (left+right)//2
cnt = 0
for L in LAN:
cnt += L // mid
if cnt >= N: left = mid+1
else: right = mid-1
print(right)