Algorithm

백준 1654번 : 랜선 자르기

jun_code 2022. 2. 12. 23:10

<문제>

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

 

1654번: 랜선 자르기

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

www.acmicpc.net


<코드>

import sys
input = sys.stdin.readline

K, N = map(int, input().split())
lan = [int(input()) for _ in range(K)]
res = 0
s, e = 1, max(lan)

while e-s >= 0:
    num = 0
    mid = (s+e)//2
    for i in range(K):
        num += lan[i] // mid
    if num >= N:
        s = mid+1
    else:
        e = mid-1
    res = e
print(res)

<풀이>

  • 이분 탐색을 위해 최소값 1, 최대값을 변수로 설정한다.
  • 각 랜선의 길이에 mid값을 나누어 특정 값에 따라 만들 수 있는 랜선의 개수를 구한다.
  • 필요한 랜선 개수보다 많은 경우와 적은 경우로 나누어 생각한다.
  • 필요한 랜선의 개수와 비교하여 start와 end 값을 변경해준다.

참고 : https://github.com/Junuux/Algorithm/tree/main/Silver/1654