백준 1654번 바로가기

나의 풀이

# 입력
n, m = map(int,input().split())
lines = []
for _ in range(n):
  lines.append(int(input()))
start,end = 1,max(lines)

# 처리
while start <= end:
  mid = (start + end) // 2
  temp = 0
  for l in lines:
    temp += (l // mid)
  if temp >= m:
    start = mid + 1
  else:
    end = mid-1

print(end)

CODE REVIEW

  1. 이분탐색을 응용해서 해결하는 문제. 처음 봤을 때에는 막막했는데, 최종 자른 선의 길이를 기준으로 이분 탐색을 실시해서 답을 찾아내었다.
  2. start=1, end=max(lines)로 설정했는데, 만일 end=min(lines)로 설정하면 [1,100,100,100,100]같은 input의 경우 1을 출력해서 문제가 발생한다.