cmod.ify

[1654] 랜선 자르기 본문

BASIC/코딩테스트

[1654] 랜선 자르기

modifyC 2025. 12. 23. 16:25
728x90
반응형

문제 이해

4개를 공평하게 최소한의 찌꺼기만 나오게 11개로 만들기
랜선 최댓값을 이용해서 이진탐색


코드 계획

입력받기
정답 담을 변수 만들기

start < end 동만 반복하며 아래 확인

mid = (start + end) // 2
mid 로 4개 반복하면서 잘라봄
line[i] // mid
그걸 개수로 세 봄

갯수가 맞냐?
인데 크냐 작냐도 확인 해야함

만약 11개보다 작으면 길이가 너무 길다
길이를 줄여라(왼쪽)
만약 11개보다 크면 길이가 너무 짧다 
길이를 늘려라(오른쪽) 
그리고 정답 갯수랑 같으면 정답에 최댓값 확인해서 저장하기
+) n개 이상이면 정답이라서 mid중 최댓값 저장해두기

 

import sys

input = sys.stdin.readline

k, n = map(int, input().split())

line = []

for i in range(k):
    t = int(input())
    line.append(t)

answer = 0
start = 1
end = max(line)

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

    for l in line:
        cnt += l//mid
       
    if cnt < n:
        end = mid -1
    elif cnt >= n: #길이가 너무짧아져버림
        start = mid + 1
        answer = max(answer, mid)
       

print(answer)
728x90
반응형

'BASIC > 코딩테스트' 카테고리의 다른 글

[11279] 최대 힙  (0) 2025.12.24
[1927] 최소 힙  (0) 2025.12.24
[1541] 잃어버린 괄호  (0) 2025.12.23
[17626] Four Squares  (0) 2025.12.23
[11727] 2×n 타일링 2  (0) 2025.12.22