🐱문제
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을 start로 정하고, 나무 중에 가장 긴 길이를 end로 설정한다.
- 이진탐색이 끝날 때까지 while문을 돌린다.
- mid를 start와 end의 중간으로 두고, 모든 값에서 mid를 빼서 총 어느정도 길이의 벌목된 나무가 나오는지 확인한다.
- 만약 벌목된 나무가 목표치 이상이면 mid+1을 start로 설정한다.
- 만약 벌목된 나무가 목표치 이하이면 mid-1을 end로 설정한다.
- start=end가 되거나 조건을 만족하는 최대 나무 절단 높이를 찾아서 반환한다.
🐱코드
n,m=map(int,input().split())
tree=list(map(int,input().split()))
start,end=1,max(tree)
while start<=end:
mid=(start+end)//2
total=0
for t in tree:
if t>=mid:
total+=t-mid
if total>=m:
start=mid+1
else:
end=mid-1
print(end)
'알고리즘' 카테고리의 다른 글
[백준/파이썬(Python),자바(JAVA)] 기타줄 1049 Silver 4 (0) | 2023.02.08 |
---|---|
[백준/파이썬(Python), 자바(JAVA)] 수리공 항승 1449(Silver 3) (0) | 2023.02.07 |
[백준/파이썬(Python)] 2252 줄세우기(Gold 3) (2) | 2023.02.05 |
[SWEA D2/파이썬(Python)] 스도쿠 검증 (0) | 2023.02.04 |
[프로그래머스/Python(파이썬)] 스킬트리 (0) | 2023.02.01 |
댓글