농담곰담곰이의곰담농

2805. 나무 자르기

by 브이담곰

https://www.acmicpc.net/problem/2805

✔ 유형 : 이분 탐색

✔ 문제 풀이: 리스트 양쪽에 start와 end 피벗을 두고 범위를 좁혀가며 답을 찾는다.

 

 

 

#2850 나무자르기
#이분 탐색
import sys

input=sys.stdin.readline # input함수 바꾸기

N, M = map(int, input().split())
trees = list(map(int, input().split(' ')))


st, en = 0, max(trees) # 최소 최대값!

while st <= en:
    # 중간 값 구하기이
    mid = (st + en) // 2
    
    count = 0
    for tree in trees:
        if tree > mid: #톱날보다 긴 나무들만.
            count += tree - mid  # 톱날h만큼 자른다

    if count >= M: # 구하려는 나무길이보다 크면 더 잘라야하므로
        st = mid+1 # 범위를 오른쪽으로 좁힌다
    else: # 구하려는 나무길이보다 작으면 덜 잘라야하므로
        en = mid-1 # 범위를 왼쪽으로 좁힌다.
    
    

    
print(en)

'Coding Test > Baekjoon' 카테고리의 다른 글

5639. 이진 검색 트리  (0) 2024.07.18
2630. 색종이 만들기  (0) 2024.07.11
3109. 뱀  (0) 2024.07.10
2493. 탑  (0) 2024.07.10
11866. 요세푸스 문제 0  (0) 2024.07.10

블로그의 정보

농담곰담곰이의곰담농

브이담곰

활동하기