알고리즘/백준[baekjoon]

[baekjoon] 백준 2805번 : 나무 자르기 (by python 파이썬)

코딩하는이씨 2022. 4. 5. 21:56
728x90
반응형

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

 

2805번: 나무 자르기

첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보

www.acmicpc.net

 

code

#나무 자르기
import sys
input = sys.stdin.readline

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

tree = list(map(int,input().split()))

start = 1
last = max(tree)
while start <= last:
    
    mid = (start+last) //2
    count = 0
    for i in tree:
        if i > mid:
            count += (i - mid)


    if count >= m:
        start = mid+1
    
    else:
        last = mid-1

print(last)

 

이번 문제에서 어떤 방식으로 탐색해나갈지 고민을 조금 했던 것 같다.

 

처음에 바로 이분탐색을 떠올리지 못하고 고민하다 이분탐색을 생각하고는 바로 풀었다.

 

다만 처음엔 시간초과가 떴다.

 

코드의 다른점은 

count += i - mid
count = count+ (i-mid)

위 코드를 아래처럼 썼었는데 아래같은 경우에는 시간초과가 떴다.

 

아직 왜그런지 이유는 모르지만 한번 공부해야될 것 같다.

 

알고리즘 문제를 풀때 시간초과가 난다면 이런부분도 확인해 봐야겠다.

728x90
반응형