์๋ ํ์ธ์! ์ค๋์ ๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง์ ๋ฌธ์ ๋ฒํธ 3020๋ฒ์ ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ๋๊ตด์ ํต๊ณผํ๋ ์ฅ์ ๋ฌผ๋ค์ ํผํ๊ธฐ ์ํด ์ต์ํ์ ์ถฉ๋ ํ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค. ์์๊ณผ ์ข ์ ์์ ๋์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ๋๊ตด์ ๋์ด์ ์ฅ์ ๋ฌผ์ ์์น๋ฅผ ์ด์ฉํ์ฌ, ๋๊ตด์ ํต๊ณผํ ๋ ์ต์ํ์ ์ถฉ๋ ํ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค. ์์๊ณผ ์ข ์ ์์ ๋์ด๋ฅผ ๋์ ํฉ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ๊ตฌํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1. ์ ๋ ฅ๋ฐ๊ธฐ: ๋๊ตด์ ๋์ด(H)์ ์ฅ์ ๋ฌผ์ ๊ฐ์(N)๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2. ์ฅ์ ๋ฌผ ๋ฐ์ดํฐ ์ ๋ ฅ: ๊ฐ ์ฅ์ ๋ฌผ์ ๋์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ์์๊ณผ ์ข ์ ์์ ๊ตฌ๋ถํ์ฌ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
3. ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ: ์ฅ์ ๋ฌผ์ ๋์ ํฉ์ ๊ณ์ฐํ์ฌ ์ ์ฅํ ๋ฐฐ์ด์ ์ด๊ธฐํํฉ๋๋ค.
4. ๋์ ํฉ ๊ณ์ฐ: ์ฅ์ ๋ฌผ์ ์์น์ ๋ฐ๋ผ ๋์ ํฉ์ ๊ณ์ฐํ์ฌ prefix ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
5. ์ต์ ์ถฉ๋ ํ์ ๊ณ์ฐ: ๋์ ํฉ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์ต์ ์ถฉ๋ ํ์์ ๊ทธ ํ์๋ฅผ ๊ฐ์ง๋ ๋์ด์ ๊ฐ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
6. ์ ๋ต ์ถ๋ ฅ: ์ต์ ์ถฉ๋ ํ์์ ๊ทธ ํ์๋ฅผ ๊ฐ์ง๋ ๋์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# N: ์ฅ์ ๋ฌผ์ ๊ฐ์, H: ๋๊ตด์ ๋์ด
N, H = map(int, input().split())
# ๋์ ํฉ์ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ
prefix = [0] * (H + 1)
# ์ฅ์ ๋ฌผ ๊ฐ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ
grid = [0] * H
# ์ฅ์ ๋ฌผ ๋ฐ์ดํฐ ์
๋ ฅ
for i in range(N):
height = int(input())
if i % 2 == 0:
# ์์์ธ ๊ฒฝ์ฐ (ํ์ ๋ฒ์งธ ์ฅ์ ๋ฌผ)
grid[0] += 1
grid[height] -= 1
else:
# ์ข
์ ์์ธ ๊ฒฝ์ฐ (์ง์ ๋ฒ์งธ ์ฅ์ ๋ฌผ)
grid[H - height] += 1
# ๋์ ํฉ ๊ณ์ฐ
for i in range(H):
prefix[i+1] = prefix[i] + grid[i]
# ์ฒซ ๋ฒ์งธ ์์๋ ์ ์ธ (prefix ๋ฐฐ์ด์ 1๋ถํฐ ์์)
prefix = prefix[1:]
# ์ต์ ์ถฉ๋ ํ์์ ๊ทธ ํ์์ ๊ฐ์ ๊ณ์ฐ
print(min(prefix), prefix.count(min(prefix)))
4. ์ฝ๋ ์ค๋ช
1. ์ ๋ ฅ๋ฐ๊ธฐ
• N๊ณผ H๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฅ์ ๋ฌผ์ ๊ฐ์์ ๋๊ตด์ ๋์ด๋ฅผ ์ค์ ํฉ๋๋ค.
2. ์ฅ์ ๋ฌผ ๋ฐ์ดํฐ ์ ๋ ฅ
• ๊ฐ ์ฅ์ ๋ฌผ์ ๋์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ์์๊ณผ ์ข ์ ์์ ๊ตฌ๋ถํ์ฌ grid ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
3. ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ
• prefix ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ํฉ ๋ฐฐ์ด์ ์ด๊ธฐํํฉ๋๋ค. ์ด ๋ฐฐ์ด์ (H+1) ํฌ๊ธฐ๋ก ์ค์ ํ์ฌ ์ธ๋ฑ์ค ๊ณ์ฐ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
4. ๋์ ํฉ ๊ณ์ฐ
• ์ฅ์ ๋ฌผ์ ์์น์ ๋ฐ๋ผ ๋์ ํฉ์ ๊ณ์ฐํ์ฌ prefix ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
5. ์ต์ ์ถฉ๋ ํ์ ๊ณ์ฐ
• ๋์ ํฉ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์ต์ ์ถฉ๋ ํ์์ ๊ทธ ํ์๋ฅผ ๊ฐ์ง๋ ๋์ด์ ๊ฐ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
6. ์ ๋ต ์ถ๋ ฅ
• ์ต์ ์ถฉ๋ ํ์์ ๊ทธ ํ์๋ฅผ ๊ฐ์ง๋ ๋์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
**** ๋์ ํฉ ๊ณ์ฐ์ ์๋ฏธ ****
+1๊ณผ -1์ ํตํด ํน์ ๊ตฌ๊ฐ์ ์์๊ณผ ๋์ ํ์ํ๋ ๋ฐฉ์์ ๊ตฌ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด์ ์ด๋ฅผ ํตํด ๋์ ํฉ(prefix sum)์ ๊ณ์ฐํ๋ฉด ๊ฐ ๋์ด์์ ์์๊ณผ ์ข ์ ์์ ์ํฅ์ ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
์์๋ฅผ ํตํ ์ค๋ช
๊ฐ๋ น, ๋๊ตด์ ๋์ด๊ฐ 5์ด๊ณ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ฌผ์ด ์ฃผ์ด์ง๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค:
• ์์์ ๋์ด๊ฐ 3์ธ ์ฅ์ ๋ฌผ์ด ํ๋ ์์ต๋๋ค.
• ์ข ์ ์์ ๋์ด๊ฐ 2์ธ ์ฅ์ ๋ฌผ์ด ํ๋ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ, grid ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฐ์ดํธํฉ๋๋ค:
1. ์์์ ์์๊ณผ ๋์ ํ์:
• grid[0] += 1 → grid = [1, 0, 0, 0, 0]
• grid[3] -= 1 → grid = [1, 0, 0, -1, 0]
2. ์ข ์ ์์ ์์์ ํ์:
• grid[H - height] += 1 → grid[5 - 2] += 1 → grid[3] += 1 → grid = [1, 0, 0, 0, 0]
๋์ ํฉ ๊ณ์ฐ
์ด์ ๋์ ํฉ(prefix sum) ๋ฐฐ์ด์ ๊ณ์ฐํฉ๋๋ค. ๊ฐ ๋์ด์์์ ์ฅ์ ๋ฌผ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๋์ ํฉ์ ์ฌ์ฉํฉ๋๋ค.
prefix = [0] * (H + 1)
for i in range(H):
prefix[i + 1] = prefix[i] + grid[i]
๊ณ์ฐ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
• prefix[1] = 1
• prefix[2] = 1
• prefix[3] = 1
• prefix[4] = 0
• prefix[5] = 0
์ต์ข ์ ์ผ๋ก prefix ๋ฐฐ์ด์ ๊ฐ ๋์ด์์์ ์ฅ์ ๋ฌผ ๊ฐ์๋ฅผ ๋ํ๋ ๋๋ค
• prefix = [0, 1, 1, 1, 0, 0]
**************************
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 2309[์ผ๊ณฑ ๋์์ด] (0) | 2024.06.20 |
---|---|
BOJ(๋ฐฑ์ค) 15649[N๊ณผ M (1)], 15650[N๊ณผ M (2)] (0) | 2024.06.20 |
BOJ(๋ฐฑ์ค) 11660[๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5] (0) | 2024.06.18 |
BOJ(๋ฐฑ์ค) 2304[์ฐฝ๊ณ ๋ค๊ฐํ] (0) | 2024.06.17 |
BOJ(๋ฐฑ์ค) 1912[์ฐ์ํฉ] (0) | 2024.06.17 |