728x90

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이면 반복문을 끝내는 조건을 써넣었다.

728x90

'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

+ Recent posts