https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net


문제 해결을 위한 과정

이 문제의 경우 이분 탐색을 이용하면 해결할 수 있는 문제였습니다. 다만 mid = left + right // 2 이렇게 만들어진 mid로 나누는 과정에서 런타임 에러 (ZeroDivisionError)를 받을수 가 있습니다. 따라서 항상 변수로 나누는 경우는 그 변수가 zero가 될 수 있는지 가능성을 확인해보아야 합니다. 


소스코드
n, k = map(int, input().split())
arr = []
for _ in range(n):
  arr.append(int(input()))
arr.sort()
left = 1
right = arr[n-1]
ans = 0

while True:
  if left > right:
    break
  mid = (left + right) // 2
  cnt = 0
  for i in range(n):
    cnt += arr[i] // mid
  if cnt >= k:
    ans = max(ans, mid)
    left = mid + 1
  else:
    right = mid - 1

print(ans)

+ Recent posts