[Python] 백준 / silver / 1654 : 랜선 자르기

김상우·2021년 12월 2일
0

문제 링크 : 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)
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글