โ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/2805
์๊ทผ์ด๋ ๋๋ฌด M๋ฏธํฐ๊ฐ ํ์ํ๋ค. ๊ทผ์ฒ์ ๋๋ฌด๋ฅผ ๊ตฌ์ ํ ๊ณณ์ด ๋ชจ๋ ๋งํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ ๋ถ์ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์ ๋ถ๋ ์๊ทผ์ด๋ค ์ง ๊ทผ์ฒ์ ๋๋ฌด ํ ์ค์ ๋ํ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ๋ด์ฃผ์๊ณ , ์๊ทผ์ด๋ ์๋ก ๊ตฌ์ ํ ๋ชฉ์ฌ์ ๋จ๊ธฐ๋ฅผ ์ด์ฉํด์ ๋๋ฌด๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค.
๋ชฉ์ฌ์ ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋จผ์ , ์๊ทผ์ด๋ ์ ๋จ๊ธฐ์ ๋์ด H๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋์ด๋ฅผ ์ง์ ํ๋ฉด ํฑ๋ ์ด ๋ ์ผ๋ก๋ถํฐ H๋ฏธํฐ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ ๋ค์, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด๋ฅผ ๋ชจ๋ ์ ๋จํด๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์, ๋์ด๊ฐ H๋ณด๋ค ํฐ ๋๋ฌด๋ H ์์ ๋ถ๋ถ์ด ์๋ฆด ๊ฒ์ด๊ณ , ๋ฎ์ ๋๋ฌด๋ ์๋ฆฌ์ง ์์ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด์ ๋์ด๊ฐ 20, 15, 10, 17์ด๋ผ๊ณ ํ์. ์๊ทผ์ด๊ฐ ๋์ด๋ฅผ 15๋ก ์ง์ ํ๋ค๋ฉด, ๋๋ฌด๋ฅผ ์๋ฅธ ๋ค์ ๋์ด๋ 15, 15, 10, 15๊ฐ ๋ ๊ฒ์ด๊ณ , ์๊ทผ์ด๋ ๊ธธ์ด๊ฐ 5์ธ ๋๋ฌด์ 2์ธ ๋๋ฌด๋ฅผ ๋ค๊ณ ์ง์ ๊ฐ ๊ฒ์ด๋ค. (์ด 7๋ฏธํฐ๋ฅผ ์ง์ ๋ค๊ณ ๊ฐ๋ค) ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด๋ ์์ ์ ์ ๋๋ 0์ด๋ค.
์๊ทผ์ด๋ ํ๊ฒฝ์ ๋งค์ฐ ๊ด์ฌ์ด ๋ง๊ธฐ ๋๋ฌธ์, ๋๋ฌด๋ฅผ ํ์ํ ๋งํผ๋ง ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋, ์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐ค ์ ์ถ๋ ฅ ์์
๐ง ๋์ด๋/์์ ์๊ฐ
โ ๋์ด๋: solved.ac ๊ธฐ์ค S2
โ ์์ ์๊ฐ: ์์ ์ ํ์๋ ๋ฌธ์ ๋ผ ์ธก์ X
โ ๊ถ์ฅ ์๊ฐ: 1์๊ฐ
๐ก ํ์ด
1) ๋ฌธ์ ์ ํ ํ์
์ด๋ถ ํ์ ๋ฌธ์ ๋ค. ์ด์ ์ด๋ถ ํ์ ๋ฌธ์ ๋ ์ ํ์ด ์กฐ๊ธ ๋ณด์ด๋ ๊ฒ ๊ฐ๊ธฐ๋..!
์์ ์ ํ์๋ ๋ฌธ์ ๋ผ ์ด๋ฒ ์คํฐ๋๋ฅผ ํตํด ๋ค์ ํ์ด๋ณด๊ณ ์ฝ๋๋ฅผ ๋ณต์ตํ๋ ์๊ฐ์ ๊ฐ์ก๋ค.
2) ์์ด๋์ด ํ๋ฆ
โ โญํต์ฌ (1) - ๋ฒ์ ์ค์ โญ
์ด๋ถ ํ์ ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค end ๋ณ์์ ์ด๊ธฐ๊ฐ ์ค์ ์ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง๊ฐ ๋งค๋ฒ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ์๋ค. ์ด์ ์ด ๋ฌธ์ ์ฒ๋ผ ์ ์ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ์๋ end๋ฅผ ํญ์ max(์ฃผ์ด์ง ๋ฆฌ์คํธ)๋ก ์ค์ ํ์! ๋ผ๋ ๋๋ง์ ๊ท์น์ ๋ง๋ค์๋ค.
โก โญํต์ฌ (2) - ์ด๋ถ ํ์ ๋์ ์ค์ โญ
๋ด๊ฐ ์์ ์ ์ ์ถํ ์ ๋ต ์ฝ๋๋ฅผ ๋ณด์ง ์๊ณ ์ฒ์ ํธ๋ ์ฌ๋์ ์์ธ๋ก ๋ฌธ์ ๋ฅผ ์ฝ์ด๋ณด๋ ์คํฐ๋ 3์ผ์ฐจ ๋ฌธ์ ์ ํ์ด ๋ฐฉ์์ด ๋น์ทํ ๊ฒ ๊ฐ์ ๋๋์ด ๋ค์๋ค.
1๏ธโฃ ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ตญ์ฌ์ฌ: ๋์ ์ฒ๋ฆฌ ์ธ์(์ด ๋ mid ๊ฐ์ n๋ช ์ด์์ ์ฒ๋ฆฌํ ์ ์๋ ์์์ ์๊ฐ)
๋๋ฌด ์๋ฅด๊ธฐ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋๋ฌด ๋ฆฌ์คํธ = ์ ๊ตญ์ฌ์ฌ ๋ฌธ์ ์์ ์ฃผ์ด์ง time ๋ฆฌ์คํธ
๋๋ฌด ์๋ฅด๊ธฐ ๋ฌธ์ ์์ ์ฌ์ฉํ ์ด๋ถ ํ์ ๋์ = ์ ๊ตญ์ฌ์ฌ ๋ฌธ์ ์์ ์ฌ์ฉํ ๋์ ์ฒ๋ฆฌ ์ธ์
์ ๊ตญ์ฌ์ฌ ๋ฌธ์ ์ ๋น๊ตํ์ ๋ ์์ ๊ฐ์ด ๋งค์นญ๋ ์ ์๊ฒ ๋ค๋ ์๊ฐํ๊ณ ์ด ๋ฌธ์ ์์์ ์ด๋ถ ํ์ ๋์์ ์๊ทผ์ด๊ฐ ์ป์ ๋๋ฌด ๊ธธ์ด์ ์ด ํฉ์ผ๋ก ์ค์ ํ๋ค.
์ ๋ ฌ๋ ๋๋ฌด ๋์ด ๋ฆฌ์คํธ๋ฅผ ๋๋ฉด์ ์๊ทผ์ด๊ฐ ์ป์ ๋๋ฌด ๊ธธ์ด(get_wood)์ ํ์ฌ ๋๋ฌด ๋์ด(tree)-์ ๋จ๊ธฐ ๋์ด(mid)๋ฅผ ๊ณ์ ๋ํด์ฃผ๋ฉด์ ์๊ทผ์ด๊ฐ ์ต์ข ์ ์ผ๋ก ์ป์ ๋๋ฌด ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ค.
โข โญํต์ฌ (3) - ํ์ ์กฐ๊ฑด ๊ฒ์ฌโญ
โก๋ฒ ๊ณผ์ ์์ ๊ณ์ฐ์ด ๋๋ get_wood ๊ฐ์ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๊ณ ์ ํ๋ ๊ธธ์ด M๊ณผ ๋น๊ตํ๋ค.
์๊ทผ์ด๊ฐ ์ป์ ๋๋ฌด ๊ธธ์ด ํฉ์ด M๊ณผ ๊ฐ๊ฑฐ๋ M๋ณด๋ค ํด ๊ฒฝ์ฐ: ํ์ฌ ์ ๋จ๊ธฐ์ ์ค์ ๋ ๋์ด๋ก ์๊ทผ์ด๊ฐ ์ํ๋ ๊ธธ์ด ์ด์์ ๊ฐ์ ธ๊ฐ ์ ์๋ค๋ ๋ป์ด๋ค. ์ ๋จ๊ธฐ ์ค์ ๋์ด์ ์ต๋๊ฐ์ ์ฐพ๋ ๊ฒ ๋ชฉํ๊ธฐ ๋๋ฌธ์ start = mid+1๋ก ๊ฐฑ์ ํด ์ ๋จ๊ธฐ ์ค์ ๋์ด ๊ฐ์ ๋๋ ค ๊ฐ๋ฉด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต๋๊ฐ์ ์ฐพ์ ๋๊ฐ๋ค.
์๊ทผ์ด๊ฐ ์ป์ ๋๋ฌด ๊ธธ์ด ํฉ์ด M๋ณด๋ค ์์ ๊ฒฝ์ฐ: ์ ๋จ๊ธฐ์ ์ค์ ๋ ๋์ด๊ฐ ๋๋ฌด ๋์์ ์๊ทผ์ด๊ฐ ๊ฐ์ ธ๊ฐ ์ ์๋ ๋ถ๋ถ์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก end = mid-1๋ก ๊ฐฑ์ ํด ์ ๋จ๊ธฐ ๋์ด๋ฅผ ๋ฎ์ถฐ์ค๋ค.
3) ๊ตฌํ
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
tree_height = list(map(int, input().split()))
tree_height.sort()
answer = 0
start, end = 1, tree_height[-1]
while start <= end:
mid = (start+end)//2
get_wood = 0
for tree in tree_height:
if tree >= mid:
get_wood += tree-mid
if get_wood >= M:
break
if get_wood >= M:
answer = mid
start = mid+1
else:
end = mid-1
print(answer)
4) ์ด๋ ค์ ๋ ์ /๋ฐฐ์ด ์
๐จ ์ด๋ ค์ ๋ ์
- ์ง๊ธ๊น์ง๋ ๊ณ์ ์ ๋ต ๊ฐ์ ์ฐพ์๋๊ฐ ๋ min, max๋ฅผ ์ด์ฉํด์ ํ์ฌ ์ ๋ต ๊ฐ๊ณผ mid ๊ฐ์ ๋น๊ตํ๋ ๋ฐฉ์์ ์ผ๋๋ฐ ์ด ๋ฌธ์ ์์๋ ๊ทธ ๋ฐฉ์์ ์ฐ๋๊น ๊ณ์ ํ๋ ค์ ๋ต์ ๊ฐฑ์ ํด๋๊ฐ๋ ๊ฒ ์กฐ๊ธ ์ด๋ ค์ ๋ค. ์ข ๋ ์๊ฐํด๋ณด๊ณ ์ด์ ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ๋์ค์ฝ๋์ ์ง๋ฌธ ์ฌ๋ ค์ผ์ง ๐
โ ๋ฐฐ์ด ์
- ์ ๋ต์ ์ฐพ์๋๊ฐ๋ ๋ฐฉ๋ฒ์ ๊ณต์์ฒ๋ผ ์ ํด์ง ๊ฑด ์๋ ๊ฒ ๊ฐ๋ค. ์ด ๋ฐฉ๋ฒ๋ ์จ๋ณด๊ณ ์ ๋ฐฉ๋ฒ๋ ์จ๋ณด์(์ดํดํ๊ณ ์ ์ฉํ๋ค๋ ์ ์ ํ์)
'Problem Solving > [ํญํด99] TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
99ํด๋ฝ ์ฝํ ์คํฐ๋ 8์ผ์ฐจ TIL / DFS(๊น์ด ์ฐ์ ํ์) (0) | 2024.11.04 |
---|---|
99ํด๋ฝ ์ฝํ ์คํฐ๋ 7์ผ์ฐจ TIL / ์์ ํ์ (0) | 2024.11.03 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 5์ผ์ฐจ TIL / BFS(๋๋น ์ฐ์ ํ์) (0) | 2024.11.02 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 4์ผ์ฐจ TIL / DFS(๊น์ด ์ฐ์ ํ์) (0) | 2024.10.31 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 3์ผ์ฐจ TIL / ์ด๋ถ ํ์ (0) | 2024.10.30 |