연습장/백준(BOJ) 문제풀이
[백준 1654] 랜선 자르기 with Python
Tesseractjh
2021. 5. 15. 23:59
문제 링크
https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
풀이
import sys
K, N = map(int, sys.stdin.readline().split())
lan = [int(sys.stdin.readline()) for _ in range(K)]
def binary_search(lst):
high = max(lst)
low = 1
while low <= high:
mid = (low+high)//2
count = sum([x//mid for x in lan])
if count < N:
high = mid - 1
else:
low = mid + 1
return high
print(binary_search(lan))
이진 탐색으로 해결하였다. binary_search는 1부터 랜선 최대길이까지의 연속된 정수 길이 중에서 특정 길이로 잘랐을 때 랜선의 개수가 N 이상이 되기 시작하는 바로 그 길이를 찾아서 반환한다.