2022.02.23
백준 1654 랜선 자르기
# 1654 랜선 자르기
# K,N 입력받는 값
K, N = map(int, input().split())
# K 줄에 걸쳐 입력받는 값을 arr에 저장
arr = []
for i in range(K):
arr.append(int(input()))
#이분탐색을 시작할 start와 end값을 지정해준다
start = 0
end = max(arr)
while start <= end:
# end가 1일 경우 mid가 0이 되어 ZeroDivisionError가 발생하는걸 막는다.
if end == 1:
break
mid = (start+end)//2
# arr 값을 하나씩 받아와 mid로 나눠진 몫으로 랜선의 갯수를 파악한다.
M = 0
for i in arr:
M += i//mid
if N > M:
end = mid - 1
else:
start = mid + 1
print(end)
처음 ZeroDivisionError가 발생했을 때는 try, except 구문을 사용하여 단순히 넘기는 시도를 했다.
그런데 그럴 경우에는 N과 K의 숫자가 같으면서 가장 긴 랜선의 길이가 1일 때
올바른 답을 출력시키지 못했기 때문에 다른 방법을 찾아봐야 했다.
여러 방법을 사용해봐도 틀렸습니다만 뜨길래 어떻게 풀어야 할까 생각하던중에
문제가 되는 것은 end가 1일 때만이라는 걸 생각하고 그냥 end가 1이면 반복문을 끝내는 조건을 써넣었다.
'Algorithm' 카테고리의 다른 글
백준 14501 파이썬 (0) | 2022.02.26 |
---|---|
백준 13458 파이썬 (0) | 2022.02.25 |
백준 10816 파이썬 (0) | 2022.02.22 |
백준 10773 파이썬 (0) | 2022.02.15 |
백준 9012 파이썬 (0) | 2022.02.15 |