https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
나의 코드
N, M = map(int, input().split())
arr = list(map(int, input().split()))
s, e = 0, max(arr)
while s <= e:
middle = (s+e)//2
ans = 0
for i in arr:
if i >= middle:
ans += i-middle
if ans >= M:
s = middle+1
else:
e = middle-1
print(e)
결과

제일 높은 나무를 기준으로 중간값을 구해서 중간값보다 높은 나무들을 잘랐을 경우에 자른 길이의 합을 기준으로 중간값을 조정하는 방법의 이분탐색으로 문제를 풀었다. 아이디어는 찾아본 것으로....ㅎㅎ
'스터디 1일 1커밋' 카테고리의 다른 글
| 240404 [BOJ/백준] 1463. 1로 만들기 (0) | 2024.04.04 |
|---|---|
| 240331 [BOJ/백준] 16493. 최대 페이지 수 (0) | 2024.03.31 |
| 240328 [BOJ/백준] 12789. 도키도키 간식드리미 (0) | 2024.03.28 |
| 240327 [BOJ/백준] 9934. 완전 이진 트리 (0) | 2024.03.27 |
| 240326 [BOJ/백준] 2839. 설탕 배달 (1) | 2024.03.26 |