문제는 그냥 머랄까 톱이 하나 있고 높이를 정해서 일괄적으로 잘라버린다. 이후에 잘린 나머지의 값의 합이 m보다 크게 만드는 최댓값을 구하면된다.
이분 탐색으로 높이를 탐색하며 적절한 높이를 구하면된다. 저번 문제와 아주 유사해서 딱히 중요한게 없었다.
1. L과 R을 정한다.
2. mid값으로 일괄적으로 자르고 남은 값이 m보다 큰지 비교한다.
3. L과 R을 갱신한다.
n,m = map(int, input().split())
tree = list(map(int,input().split()))
l = 0
r = max(tree)
mid = (l+r+1)//2
while l != r:
# clac
sum = 0
for t in tree:
tmp = t - mid
if tmp > 0:
sum += (t-mid)
if sum >= m:
l = mid
else:
r = mid-1
mid = (l+r+1)//2
print(mid)
이상하게 python3로 제출하면 시간초과가 나길래 도대체 무슨 문제인지 감을 못잡겠더라 예외 상황을 고민해봐도 안되길래 귀찮아서 pypy3로 제출해버렸다.
'알고리즘' 카테고리의 다른 글
백준 1300 풀이 (k번째 수, 이분 탐색) (0) | 2021.03.25 |
---|---|
백준 2110 풀이 (공유기 설치, 이분 탐색) (0) | 2021.03.24 |
백준 1654 풀이 (랜선 자르기, parametric search, 파라매트릭 서치) (0) | 2021.03.21 |
백준 10816 풀이 (숫자 카드 2, 이분 탐색, 해쉬 사용, Counter) (0) | 2021.03.18 |
백준 1920 풀이 (수 찾기, 이분 탐색) (0) | 2021.03.18 |