[BOJ] 2805 나무 자르기 (python)

백준 2805: 나무 자르기 (파이썬)

 

 

2805번: 나무 자르기

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

www.acmicpc.net

# [BOJ] 2805. 나무 자르기

# N: 나무의 수, M: 가져가고자 하는 나무의 길이
N, M = map(int, input().split())
L = list(map(int, input().split()))

# 적어도 M 미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값
min_v = 0
max_v = max(L)

while min_v <= max_v:
    mid = (min_v + max_v) // 2
    a = 0
    for l in L:
        if l > mid:
            a += l - mid
    if a >= M:
        min_v = mid + 1
    else:
        max_v = mid - 1

print(max_v)

전형적인 이분탐색 코드라 왜 시간초과가 뜨나 했는데

15번째줄에서 l > mid 대신 l - mid > 0을 쓰면 시간 초과

연산이 두번이라 시간복잡도가 늘어나는 듯 하다! 주의하기

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 19844. 단어 개수 세기 (python)  (0) 2022.12.18
[BOJ] 11976. Promotion Counting (python)  (0) 2022.12.17
[BOJ] 1966 프린터 큐 (python)  (0) 2022.12.11
[BOJ] 4949 균형잡힌 세상 (python)  (0) 2022.12.10
[BOJ] 2217 로프 (python)  (0) 2022.11.27