coding_test
[๋ฐฑ์ค] 2805. ๋๋ฌด ์๋ฅด๊ธฐ (ํ์ด์ฌ)
aeightchill
2025. 4. 14. 21:57
728x90
๐๏ธ ๋ฌธ์
๐ Point
Binary Search
์ ๋จ๊ธฐ ๋์ด H๋ฅผ ์ด์ง ํ์์ผ๋ก ์กฐ์ ํ๋ฉฐ, ์๋ฆฐ ๋๋ฌด์ ํฉ์ด M ์ด์์ธ์ง ํ์ธํ๋ค.
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๋ ๋์ ๋์ด๋ ๊ฐ๋ฅํ๋ฏ๋ก ๋์ด๋ฅผ ์ฌ๋ฆฐ๋ค. (left = mid + 1)
- ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด ๋ ๋ฎ์ ๋์ด๋ก ๋ด๋ ค์ผ ํ๋ค. (right = mid - 1)
๐ ์ฝ๋
def solution():
N, M = map(int, input().split())
trees = list(map(int, input().split()))
def is_enough(height):
return sum((tree - height) for tree in trees if tree > height) >= M
left, right = 0, max(trees)
result = 0
while left <= right:
mid = (left + right) // 2
if is_enough(mid):
result = mid
left = mid + 1
else:
right = mid - 1
print(result)
solution()
โ๐ป ํ์ด
์๊ฐ ๋ณต์ก๋ : O(N × log(max trees))
- function : is_enough(height)
- ํ์ฌ ๋์ด height๋ก ์ ๋จ๊ธฐ๋ฅผ ์ค์ ํ์ ๋, ์๋ ค ๋์ค๋ ๋๋ฌด ๊ธธ์ด ์ดํฉ์ ๊ณ์ฐ
- ํฉ์ด M ์ด์์ด๋ฉด True ๋ฐํ
- binary search
- ์ด์ง ํ์ ๋ฒ์ : 0 ~ ๊ฐ์ฅ ๋์ ๋๋ฌด ๋์ด
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฅ ํฐ ๋์ด๋ฅผ ์ฐพ๋๋ค.
- ๋งค๋ฒ is_enough๋ฅผ ํธ์ถํด ์กฐ๊ฑด์ ํ์ธํ๊ณ ๋ฒ์๋ฅผ ์กฐ์ ํ๋ค.
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๋ ๋์ ๋์ด๋ ๊ฐ๋ฅํ๋ฏ๋ก left = mid + 1
- ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฉด ๋ ๋ฎ์ ๋์ด๋ก right = mid - 1
728x90