백준, 랜선 자르기 ,1654,파이썬

2024. 9. 4. 23:01ETC/Algorithm

[유형]

이진분류

 

[문제링크]

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

 

[요약]

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. 

박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 

이때 만들 수 있는 최대 랜선의 길이를 구하는 프로그램을 작성하시오.

 

[문제풀이]

start =1, end=가지고 있는 랜선 길이 중 가장 긴 랜선의 길이

mid = (start + end)//2의 길이로 랜선을 자를 때, N개 보다 많다면 mid보다 더 크게 잘라도 되는지 확인하기 위해 start = mid+1을 한다. N개의 랜선을 만들 수 없다면 mid보다 더 작게 자르기 위해 end = mid-1을 한다.

import sys
from collections import defaultdict
def input():
    return sys.stdin.readline().rstrip()

K, N = map(int, input().split())
lines = []
for _ in range(K):
    lines.append(int(input()))

start, end = 1, max(lines)

while(start <= end):
    mid = (start + end) // 2
    line_cnt = 0

    for line in lines:
        line_cnt += line //mid

    if line_cnt >= N:
        start = mid +1
    else:
        end = mid -1

print(end)

'ETC > Algorithm' 카테고리의 다른 글

백준, K번째 수, 1300, 파이썬  (0) 2024.09.05
백준, 공유기 설치, 2110, 파이썬  (0) 2024.09.04
백준, 합이 0인 네 정수, 7455, 파이썬  (0) 2024.09.04
백준, 숫자 카드2, 10816  (0) 2024.09.04
백준, 듣보잡, 1764  (0) 2024.09.04