개미의 개열시미 프로그래밍

[알고리즘] 백준2805 나무자르기 - 파이썬 본문

알고리즘/이분탐색

[알고리즘] 백준2805 나무자르기 - 파이썬

YunHyeok 2021. 8. 21. 18:15
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

 

 

[풀이 코드]

from sys import stdin

n, m = map(int, stdin.readline().split())
a_list = list(map(int, stdin.readline().split()))

start, end = 1, max(a_list)

while start <= end:
    mid = (start + end) // 2

    cnt = 0

    # 방법 1
    # for tree in a_list:
    #     if tree - mid > 0:
    #         cnt += tree - mid

    # 방법 2
    cnt = sum(tree - mid if tree - mid > 0 else 0 for tree in a_list)

    if cnt >= m:
        start = mid + 1
    else:
        end = mid - 1

print(end)

 

- 코드에 주석 처리된 '방법 1' 대로 하면 답은 맞지만 계속 시간 초과가 나서 고생 좀 했다. 결국 다른 분풀이를 보고 방법 2 대로 수정했더니 인라인으로 코드를 작성하면 속도가 향상이 되는 것인지 잘 모르겠다. 이 부분은 더 공부해보려 한다..

 

728x90
반응형
Comments