๋ฌธ์
๋ฐฑ์ค 2805. ๋๋ฌด ์๋ฅด๊ธฐ https://www.acmicpc.net/problem/2805
์ฝ๋
n, m = map(int, input().split())
forest = list(map(int, input().split()))
s = 1
e = max(forest)
while s <= e: # ๊ต์ฐจ๋๊ธฐ ์ ๊น์ง
mid = (s+e) // 2
# ์ผ๋ง๋ ๋๋ฌด๋ฅผ ๋ชจ์๋๊ฐ?
wood = 0
for tree in forest:
if tree >= mid:
wood += tree - mid
# ์
?
if wood >= m:
s = mid + 1
# ๋ค์ด?
else:
e = mid - 1
print(e)
- ์์ ํ์์ผ๋ก ๋ชจ๋ H ๊ฐ์ ๋ค ํ์ธํ๊ธฐ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ฏ๋ก, ์ด๋ถ ํ์์ ์ฌ์ฉํด์ผ ํ๋ค.
- H(์ ๋จ๊ธฐ ๋์ด)๋ฅผ ์ด๋ถ ํ์ํ๋ฉฐ, ํ์ฌ ๋์ด๋ก ๋๋ฌด๋ฅผ ์๋ฅด๋ฉด m๋งํผ ์ป์ ์ ์๋์ง๋ฅผ ํ๋จํ๋ค.
ํ์ด
n, m = map(int, input().split())
forest = list(map(int, input().split()))
s = 1 # ์ต์ ์๋ฅผ ์ ์๋ ๋์ด
e = max(forest) # ์ต๋ ์๋ฅผ ์ ์๋ ๋์ด
์ ๋ ฅ๋ฐ๊ธฐ ๋ฐ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ค.
- n: ๋๋ฌด์ ์
- m: ๊ฐ์ ธ๊ฐ์ผ ํ๋ ์ต์ ๋๋ฌด ๊ธธ์ด
- forest: ๋๋ฌด๋ค์ ๋์ด ๋ฆฌ์คํธ
- ์ด๋ถ ํ์์ ์ํด s, e๋ฅผ ์ค์ (๋์ด์ ๋ฒ์)
while s <= e:
mid = (s + e) // 2 # ์ ๋จ๊ธฐ ๋์ด ํ๋ณด
์ด๋ถ ํ์์ ์์ํ๋ค.
- mid : ํ์ฌ ํ์ ์ค์ธ ์ ๋จ๊ธฐ ๋์ด
- ์ด ๋์ด๋ก ์๋ฅผ ๋ ๋๋ฌด๋ฅผ ์ผ๋ง๋ ์ป์ ์ ์๋์ง ํ์ธํ๋ค.
wood = 0
for tree in forest:
if tree >= mid:
wood += tree - mid # ์๋ฅธ ๋งํผ๋ง ๋ํจ
๋๋ฌด์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ค.
- ๊ฐ ๋๋ฌด๊ฐ mid๋ณด๋ค ํฌ๋ฉด ์๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๋ฆฐ ๊ธธ์ด๋ฅผ ๋ํด์ค๋ค.
- ์ ์ฒด ์๋ฆฐ ๋๋ฌด์ ์ดํฉ์ wood๋ก ์ ์ฅํ๋ค.
if wood >= m:
s = mid + 1 # ์ถฉ๋ถํ ์ป์์ผ๋ ๋ ๋๊ฒ ์๋ผ๋ณด๊ธฐ
else:
e = mid - 1 # ๋ถ์กฑํ๋๊น ๋ฎ์ถฐ์ผ ํจ
์ด๋ถ ํ์ ์กฐ๊ฑด์ ์ค์ ํ๋ค.
- ๋๋ฌด๋ฅผ ์ถฉ๋ถํ ์ป์๋ค๋ฉด (wood >= m) ์ ๋จ๊ธฐ ๋์ด๋ฅผ ๋ ๋์ผ ์ ์์ผ๋ฏ๋ก s = mid + 1
- ๋ถ์กฑํ๋ค๋ฉด ๋์ด๋ฅผ ๋ฎ์ถฐ์ผ ํ๋ฏ๋ก e = mid - 1
print(e)
์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ต์ข ์ ์ผ๋ก ์ ๋จ๊ธฐ ๋์ด์ ์ต๋๊ฐ์ e์ ์ ์ฅ๋๋ค.
- s > e๊ฐ ๋์์ ๋, e๊ฐ ์ ํจํ ๋ง์ง๋ง ์ ๋จ๊ธฐ ๋์ด์ด๋ค.
๐ก ์ด ๋ฌธ์ ๋ "์ต๋๊ฐ์ ๊ตฌํ๋ผ"๋ ๋ง์์ ์ด๋ถ ํ์์ ํํธ๋ฅผ ์ป์ ์ ์๋ค.
๐ก ์ด๋ค ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต๊ณ ์ ๊ฐ์ ๊ตฌํ ๋๋ ์ด๋ถ ํ์์ ๋ ์ฌ๋ฆด ์ ์๋ค.
'๐ก ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 15654. N๊ณผ M (5) (0) | 2025.04.05 |
---|---|
[๋ฐฑ์ค] 14501. ํด์ฌ (0) | 2025.03.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] N-Queen (0) | 2024.08.07 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์์ฐพ๊ธฐ (0) | 2024.08.06 |
[๋ฐฑ์ค] 1135. ๋ด์ค ์ ํ๊ธฐ (0) | 2024.08.03 |
๋ฌธ์
๋ฐฑ์ค 2805. ๋๋ฌด ์๋ฅด๊ธฐ https://www.acmicpc.net/problem/2805
์ฝ๋
n, m = map(int, input().split())
forest = list(map(int, input().split()))
s = 1
e = max(forest)
while s <= e: # ๊ต์ฐจ๋๊ธฐ ์ ๊น์ง
mid = (s+e) // 2
# ์ผ๋ง๋ ๋๋ฌด๋ฅผ ๋ชจ์๋๊ฐ?
wood = 0
for tree in forest:
if tree >= mid:
wood += tree - mid
# ์
?
if wood >= m:
s = mid + 1
# ๋ค์ด?
else:
e = mid - 1
print(e)
- ์์ ํ์์ผ๋ก ๋ชจ๋ H ๊ฐ์ ๋ค ํ์ธํ๊ธฐ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ฏ๋ก, ์ด๋ถ ํ์์ ์ฌ์ฉํด์ผ ํ๋ค.
- H(์ ๋จ๊ธฐ ๋์ด)๋ฅผ ์ด๋ถ ํ์ํ๋ฉฐ, ํ์ฌ ๋์ด๋ก ๋๋ฌด๋ฅผ ์๋ฅด๋ฉด m๋งํผ ์ป์ ์ ์๋์ง๋ฅผ ํ๋จํ๋ค.
ํ์ด
n, m = map(int, input().split())
forest = list(map(int, input().split()))
s = 1 # ์ต์ ์๋ฅผ ์ ์๋ ๋์ด
e = max(forest) # ์ต๋ ์๋ฅผ ์ ์๋ ๋์ด
์ ๋ ฅ๋ฐ๊ธฐ ๋ฐ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ค.
- n: ๋๋ฌด์ ์
- m: ๊ฐ์ ธ๊ฐ์ผ ํ๋ ์ต์ ๋๋ฌด ๊ธธ์ด
- forest: ๋๋ฌด๋ค์ ๋์ด ๋ฆฌ์คํธ
- ์ด๋ถ ํ์์ ์ํด s, e๋ฅผ ์ค์ (๋์ด์ ๋ฒ์)
while s <= e:
mid = (s + e) // 2 # ์ ๋จ๊ธฐ ๋์ด ํ๋ณด
์ด๋ถ ํ์์ ์์ํ๋ค.
- mid : ํ์ฌ ํ์ ์ค์ธ ์ ๋จ๊ธฐ ๋์ด
- ์ด ๋์ด๋ก ์๋ฅผ ๋ ๋๋ฌด๋ฅผ ์ผ๋ง๋ ์ป์ ์ ์๋์ง ํ์ธํ๋ค.
wood = 0
for tree in forest:
if tree >= mid:
wood += tree - mid # ์๋ฅธ ๋งํผ๋ง ๋ํจ
๋๋ฌด์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ค.
- ๊ฐ ๋๋ฌด๊ฐ mid๋ณด๋ค ํฌ๋ฉด ์๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๋ฆฐ ๊ธธ์ด๋ฅผ ๋ํด์ค๋ค.
- ์ ์ฒด ์๋ฆฐ ๋๋ฌด์ ์ดํฉ์ wood๋ก ์ ์ฅํ๋ค.
if wood >= m:
s = mid + 1 # ์ถฉ๋ถํ ์ป์์ผ๋ ๋ ๋๊ฒ ์๋ผ๋ณด๊ธฐ
else:
e = mid - 1 # ๋ถ์กฑํ๋๊น ๋ฎ์ถฐ์ผ ํจ
์ด๋ถ ํ์ ์กฐ๊ฑด์ ์ค์ ํ๋ค.
- ๋๋ฌด๋ฅผ ์ถฉ๋ถํ ์ป์๋ค๋ฉด (wood >= m) ์ ๋จ๊ธฐ ๋์ด๋ฅผ ๋ ๋์ผ ์ ์์ผ๋ฏ๋ก s = mid + 1
- ๋ถ์กฑํ๋ค๋ฉด ๋์ด๋ฅผ ๋ฎ์ถฐ์ผ ํ๋ฏ๋ก e = mid - 1
print(e)
์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ต์ข ์ ์ผ๋ก ์ ๋จ๊ธฐ ๋์ด์ ์ต๋๊ฐ์ e์ ์ ์ฅ๋๋ค.
- s > e๊ฐ ๋์์ ๋, e๊ฐ ์ ํจํ ๋ง์ง๋ง ์ ๋จ๊ธฐ ๋์ด์ด๋ค.
๐ก ์ด ๋ฌธ์ ๋ "์ต๋๊ฐ์ ๊ตฌํ๋ผ"๋ ๋ง์์ ์ด๋ถ ํ์์ ํํธ๋ฅผ ์ป์ ์ ์๋ค.
๐ก ์ด๋ค ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต๊ณ ์ ๊ฐ์ ๊ตฌํ ๋๋ ์ด๋ถ ํ์์ ๋ ์ฌ๋ฆด ์ ์๋ค.
'๐ก ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 15654. N๊ณผ M (5) (0) | 2025.04.05 |
---|---|
[๋ฐฑ์ค] 14501. ํด์ฌ (0) | 2025.03.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] N-Queen (0) | 2024.08.07 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์์ฐพ๊ธฐ (0) | 2024.08.06 |
[๋ฐฑ์ค] 1135. ๋ด์ค ์ ํ๊ธฐ (0) | 2024.08.03 |