본문 바로가기
Problem Solving/백준

백준 1654 랜선 자르기 [파이썬, 이분 탐색, 매개 변수 탐색]

by JC_ 2023. 3. 15.
 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

K, N = map(int, input().split())
lan = [int(input()) for _ in range(K)]
start, end = 1, max(lan)        # start 1 , end 랜선의 max값

while start <= end:             # start와 end 값이 교차할 때 까지 돌아
    mid = (start + end) // 2    # start와 end 값을 더해서 절반 값으로 시작
    lines = 0                   # 잘린 랜선의 개수를 누적할 변수
    for i in lan:               # 랜선을 하나씩 돌아
        lines += i // mid       # 지정한 중간 값으로 랜선을 자르고 갯수를 담아

    if lines >= N:              # 랜선의 개수가 우리가 원하는 N값보다 크다면
        start = mid + 1         # start의 값을 mid 바로 오른쪽으로 옮겨
    else:                       # 랜선의 개수가 우리가 원하는 N값보다 작다면
        end = mid - 1           # end의 값을 mid 바로 왼쪽으로 옮겨
print(end)

댓글