<문제 링크>
https://www.acmicpc.net/problem/2805
<정답 코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
n, m = map(int, input().split())
trees = list(map(int, input().split()))
start, end = 1, max(trees)
while start <= end:
mid = (start + end) // 2
log_sum = 0 # 현재 높이에서 벌목 나무 합
for i in trees:
if i >= mid:
log_sum += i - mid
if log_sum >= m:
start = mid + 1
else:
end = mid -1
print(end)
|
cs |
단순하게 for문으로 높이를 1씩 줄이면서 정답 찾으면 시간초과 발생
전체의 중간 값을 비교하며 검색 범위를 반씩 줄여나가는 이분탐색으로 해결
'프로그래밍 > Python' 카테고리의 다른 글
백준_python 2579번 계단 오르기 (DP) (0) | 2024.06.14 |
---|---|
백준_python 15686번 치킨 배달(combiantions, 백트래킹) (1) | 2024.06.13 |
백준_python 4358번 생태학 (소수 반올림) (1) | 2024.06.10 |
백준_python 1269번 대칭 차집합 (0) | 2024.06.05 |
파이썬_zip() 함수 (0) | 2024.06.04 |