백준 1654 [python]

https://www.acmicpc.net/problem/1654

import sys

def binary_search(start, end, k):
    global res
    if start > end:
        return
    wire_len = (end + start) // 2
    
    cnt = 0
    for wire in wires:
        cnt += wire // wire_len
        
    if cnt < k:
        binary_search(start, wire_len - 1, k)
    else:
        res = wire_len
        binary_search(wire_len + 1, end, k)

n, k = map(int, input().split())
wires = []
for i in range(n):
    wires.append(int(sys.stdin.readline()))
res = 0

binary_search(1, max(wires), k)
print(res)

이분 탐색 알고리즘을 알고 있는데도 풀 방법을 생각해 내지 못했다. 사실 매개변수 탐색 알고리즘까지 구글링하고 코드를 짰다. 멍청한 느낌이 들었다.

좋은 웹페이지 즐겨찾기