문제 링크 : https://www.acmicpc.net/problem/1654
문제를 정확히 이해하는 시간은 많이 투자해도 좋다고 느꼈다. 문제를 빨리 읽고 빨리 풀려고 하면 오히려 늦어지는 것 같다. 랜선을 자르는 행동에서 canMake 가 1 늘어난다고 내맘대로 판단 해버리고 푸니까 한 10분정도 까먹은거 같다.
문제 해결은 그런식으로 하면 될 것 같고.. 이분탐색 로직에는 전보다 좀 익숙해졌다. while 조건문을 left <= right 로 해놓고 answer 를 저장 해놓으면 정답을 쉽게 캐치할 수 있다.
import sys K, N = map(int, sys.stdin.readline().split()) wire = [] for _ in range(K): wire.append(int(sys.stdin.readline())) def check(length): canMake = 0 for w in wire: canMake += (w // length) if canMake >= N: return True else: return False left = 1 right = max(wire) answer = 0 while left <= right: mid = (left+right) // 2 if check(mid): answer = mid left = mid + 1 else: right = mid - 1 print(answer)