본문 바로가기
스터디/알고리즘

랜선 자르기

by 세졍 2024. 4. 23.

문제이해
가지고 있는 랜선의 길이를 통해서 N개의 랜선을 만들기위한
최대길이를 구하기 
자른 랜선의 길이에서 나머지는 그냥 버림

이분탐색

  1. 배열의 가운데 요소를 선택합니다.
  2. 가운데 요소가 찾고자 하는 값과 동일한지 확인합니다.
  3. 만약 가운데 요소보다 찾고자 하는 값이 크다면, 가운데 요소의 오른쪽 부분을 새로운 탐색 범위로 설정합니다.
  4. 만약 가운데 요소보다 찾고자 하는 값이 작다면, 가운데 요소의 왼쪽 부분을 새로운 탐색 범위로 설정합니다.
  5. 이 과정을 찾고자 하는 값을 찾을 때까지 또는 더 이상 탐색할 요소가 없을 때까지 반복합니다.

-> 길이가 될수있는 가장작은 최소값 : 1

-> 길이가 될수있는 가장 큰값 : 가지고있는 랜선 중 가장 큰값

-> 만약 각 랜선의 길이를 중간값으로 나눠서 그 개수를 모아서 우리가 확보해야하는 개수 N개보다 작을경우에는 중간값을 더 작게 분할해야 하므로 가장큰값을 중간값 - 1 로 갱신해서 반복하기

 

 

K , N = map(int,input().split()) # K가지고있는개수 , N필요한 개수
arr = []
for _ in range(K):
    cm = int(input())
    arr.append(cm)
max_v = max(arr)
min_v = 1
# 가장 짧은 길이 : 1
# 가장 긴 길이 : max_v

# 이분탐색
while min_v <= max_v:
    mid = (min_v+max_v) // 2
    result = 0
    for i in arr:
        result += i//mid
    if result < N :
        max_v = mid - 1
    else :
        min_v = mid + 1
print(max_v)

'스터디 > 알고리즘' 카테고리의 다른 글

프로세스  (0) 2024.05.02
베스트앨범  (0) 2024.05.01
신입사원  (0) 2024.04.17
케빈 베이컨의 6단계 법칙  (0) 2024.03.21
영역구하기  (1) 2024.03.18