-
[백준] 2805번 문제 (나무 자르기) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 6. 11:06
https://www.acmicpc.net/problem/2805
import sys input = sys.stdin.readline n, m = map(int, input().split()) trees = list(map(int, input().split())) left, right = 0, max(trees) while left <= right: _sum = 0 mid = (left + right) // 2 for t in trees: if t - mid > 0: _sum += t - mid if _sum >= m: left = mid + 1 else: right = mid - 1 print(right)
이분탐색 문제이다.
left와 right를 각각 정답이 될 수 있는 최소값과, 최대값을 할당해준후 그 값들을 기준으로
mid라는 변수를 할당해준다.
그 이후 left <= right의 조건이 만족하는 동안 while문을 반복하며,
mid 값을 조절하면서 정답을 찾을때까지 탐색한다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 10816번 문제 (숫자 카드 2) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 2110번 문제 (공유기 설치) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 1654번 문제 (랜선 자르기) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 11725번 문제 (트리의 부모 찾기) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 1991번 문제 (트리 순회) 파이썬(Python) 풀이 (0) 2021.09.06