백준_2805번

정소담·2023년 3월 1일
0

BOJ Short Review

목록 보기
40/44
post-thumbnail

2805번 나무자르기

주어지는 길이의 나무들을 같은 길이로 잘라 원하는 길이의 나무만큼 얻을 수 있다고 했을 때 가장 긴 길이를 구하는 문제.

이전에 풀었던 랜선구하기 문제와 비슷했다.

import sys
input = sys.stdin.readline

n,m = map(int,input().split()) # 나무의 수, 가져가려는 나무의 총 길이
tree = list(map(int,input().split())) # 나무들의 길이 리스트
x,y = 1,max(tree) # 중간 값을 구하기 위한 최소값, 최대값

while x <= y:
    mid = (x+y) // 2 # 중간값
    cnt = 0
    for i in tree:
        if i > mid: # 나무의 길이가 중간 값 보다 클 경우에만
            cnt += (i-mid) # 잘라낸 나무의 길이를 합산
    if cnt >= m: # 만약 잘라낸 나무들의 길이가 원하는 것보다 길면
        x = mid + 1 # 중앙값을 더 큰 수들 중에서 찾음
    elif cnt < m: # 짧으면
        y = mid - 1 # 중앙값을 더 작은 수들 중에서 찾음
print(y)
profile
Hi ! I'm newbie :)

0개의 댓글