백준|1654번|랜선 자르기

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
54/136

문제설명
가지고 있는 랜선의 개수, 필요한 개수, 가지고 있는 랜선들의 길이를 받은뒤 랜선을 모두 같은 길이로 자를 때 자를 수있는 최대 길이를 구하는 문제입니다.

작동 순서
1. 가지고 있는 랜선의 개수, 필요한 개수를 입력받습니다.
2. 가지고 있는 랜선들의 길이를 입력받습니다.
3. 자르는 길이는 1부터 가장 긴 랜선의 길이로 지정합니다.
4. 이진탐색을 이용하여 랜선을 잘랐을 때 개수가 부족한 경우 start 값을 늘리고 개수가 넘치는 경우 final 값을 줄여가면서 최대값을 찾습니다.
5. 찾은 최대값을 출력합니다.

소스코드

import sys
N, M = map(int, sys.stdin.readline().split())
cable = []
for i in range(N):
    cable.append(int(sys.stdin.readline()))
start = 1
final = max(cable)
max_length = 0
while start <= final:
    count = 0
    length = (start+final)//2
    for i in range(len(cable)):
        count += cable[i]//length
    if count >= M and max_length < length:
        max_length = length
    if count >= M:
        start = length+1
    else:
        final = length-1
print(max_length, end='')

후기
매개변수 탐색을 처음 접해봐서 생소했던 문제였지만 이진탐색과 크게 다르지 않아서 풀 수 있었던 것 같습니다. 다양한 유형의 문제들을 접해봐야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글