[Python] BOJ 1654 - 랜선 자르기(Binary Search)
728x90
반응형
https://www.acmicpc.net/problem/1654
이분 탐색문제이다(함정이 있는)
import sys
input = sys.stdin.readline
N,M = map(int,input().split())
L = []
for _ in range(N):
L.append(int(input()))
def binarySearch(a, m, M):
low,sum,r = 1,0,0
high = m
while low <= high:
mid = (low + high) // 2
for i in a:
sum += i//mid
if(sum >= M):
low = mid + 1
r = mid
sum = 0
else:
high = mid - 1
sum = 0
return r
print(binarySearch(L, max(L), M))
보통 이분탐색은 low에 0을 넣고 시작하지만, 처음에 low에 0을 넣으니
1 1
1
이런 케이스가 들어왔을때 low = 0, high = 1이 되어 mid가 0이되고 sum에 i // mid를 더할 때 0으로 나누는
ZeroDivisionError가 발생한다. 따라서, 이 문제는 low를 1로 설정해 주어야 한다.
* 이 문제와 비슷한 문제로는 https://www.acmicpc.net/problem/2805가 있다.
728x90
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 2108 - 통계학 (0) | 2020.02.29 |
---|---|
[Python] BOJ 1316 - 그룹 단어 체커 (0) | 2020.02.26 |
[Python] BOJ 2609 - 최대공약수와 최소공배수(유클리드 호제법) (0) | 2020.02.18 |
[Python] BOJ 5430 - AC(deque) (0) | 2020.02.12 |
[Python] BOJ 1966 - 프린터 큐(Queue) (0) | 2020.02.11 |
TAGS.