728x90
반응형
Silver III
# 1654 랜선 자르기
링크 : https://www.acmicpc.net/problem/1654
풀이
K, N = map(int, input().split())
lan = [int(input()) for i in range(K)]
def bs(arr, target):
start = 1 # zerodivisionerror 방지, 0 → 1
end = max(lan)
while start <= end:
mid = (start+end) // 2
cnt = 0 # cnt: while문 안에서 작동하도록 할 것
for i in lan:
cnt += i // mid
if cnt >= target:
start = mid + 1
else:
end = mid - 1
return end
print(bs(lan, N))
후기
- cnt를 while문 밖에 넣었던 바람에 작동 오류가 있었다. cnt 위치에 주의할 것
- zerodivisionerror가 발생했었다. start를 0이 아닌 1로 설정해서 문제없이 해결할 수 있었다
- cnt, target의 케이스를 세 개(<, ==, >)로 나누지 않고 두 개(>=, <)으로 나누는 이유에 대해서 아직 이해하지 못했다. **
'Algorithm Study > Python' 카테고리의 다른 글
[백준 파이썬] # 11050 이항 계수 1 (0) | 2022.02.24 |
---|---|
[백준 파이썬] #1193 분수찾기 (0) | 2022.02.24 |
[백준 파이썬] # 2805 나무 자르기 (0) | 2022.02.22 |
[백준 파이썬] # 1929 소수 구하기 (복습 필요) (0) | 2022.02.22 |
[백준 파이썬] # 1037 약수 (0) | 2022.02.21 |