티스토리 뷰

n, m = map(int, input().split())
length = list(map(int, input().split()))

# 최적의 수(=h)를 찾기 위해 이진탐색을 해야 함
start = 0
end = max(length)  # 떡 중에 가장 긴 떡

h = 0
while start <= end:
    total = 0  # 잘린 떡의 길이
    mid = (start+end)//2
    for i in length:
        if i > mid:  # 떡이 mid보다 길면 자름, 안 길면 못 자름
            total += i - mid  # 잘린 떡 합하기
    if total < m:
        # 반토막내면서 자르다가 떡이 m보다 부족해지면 끝점을 감소시킴 (더 자른다)
        end = mid-1
    else:  # 잘린 떡의 합이 m보다 크거나 같을 때
        # 떡이 아직 m보다 크면 시작점을 늘림 (덜 자른다)
        h = mid  # 최적의 h를 구하므로 기록해두고
        start = mid+1  # 시작점을 늘렸을 때 길이 확인해보기
print(h)
# h를 뺀 것의 합이 m보다 커야함.
# h를 구하는 것...

'Python > 이코테' 카테고리의 다른 글

8-2. 1로 만들기  (0) 2022.07.10
7-1. 범위를 반 씩 줄여가는 탐색  (0) 2022.07.10
7-2. 부품찾기  (0) 2022.07.07
6-1. 기준에 따라 데이터를 정렬  (0) 2022.07.03
6-4. 두 배열의 원소 교체  (0) 2022.06.30
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday