코딩테스트/문제
[백준] 2805번 나무 자르기
스키(ski)
2023. 7. 3. 18:43
문제 내용
https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
풀이 과정
-이분탐색으로 판단하고 문제풀이를 진행함.
풀이중 문제점
1.이분탐색 종료지점에 대한 불확실함.
문제점 해결 과정
1.start값의 변경을 통해 반복문을 탈출하였음.
해결 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import sys
sys_input=sys.stdin.readline
n,m=map(int,sys_input().rstrip().split())
trees=sorted(list(map(int,sys_input().rstrip().split()))) #정렬까지 시킴
end=trees[-1] #가장 큰값을 끝으로 잡음 or 정렬 안시킬거면 max(trees)해도됨
start=1
while start<=end:
mid=(start+end)//2
cur=0
for t in trees:
if t>mid:
cur+=t-mid
if cur>m:
start=mid+1
elif cur<m:
end=mid-1
else:
start=start+1
print(end) #start로 while을 탈출하기에 end가 답이됨
|
cs |
주요 개념
- 이분 탐색(Binary Search)