์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ๊ณ๋จ์ ์ค๋ฅผ ๋ ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ๊ณ๋จ์ ํน์ ๊ท์น์ ๋ฐ๋ผ ์ฌ๋ผ์ผ ํ๋ฉฐ, ๋์ ๊ณํ๋ฒ(Dynamic Programming)์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ, ์ต์ข ์ ์ธ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฌธ์ ์ค๋ช
๋ฐฑ์ค 2579๋ฒ ๋ฌธ์ “๊ณ๋จ ์ค๋ฅด๊ธฐ”๋ ์ฃผ์ด์ง ๊ณ๋จ์ ์ค๋ฅด๋ฉด์ ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ๊ณ๋จ์ ์ค๋ฅผ ๋ ๋ค์ ๊ท์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค:
1) ๊ณ๋จ์ ํ ๋ฒ์ ํ ๊ณ๋จ ๋๋ ๋ ๊ณ๋จ์ฉ ์ค๋ฅผ ์ ์์ต๋๋ค.
2) ์ฐ์๋ ์ธ ๊ฐ์ ๊ณ๋จ์ ๋ชจ๋ ๋ฐ์์๋ ์ ๋ฉ๋๋ค.
3) ๋ง์ง๋ง ๊ณ๋จ์ ๋ฐ๋์ ๋ฐ์์ผ ํฉ๋๋ค.
2. ๋ฌธ์ ์ ๊ทผ๋ฒ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๊ณํ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ํต์ฌ ์์ด๋์ด๋ ๊ฐ ๊ณ๋จ์ ๋๋ฌํ ๋๊น์ง ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๊ณ ์ ์ฅํ์ฌ, ๊ทธ ๊ฐ์ ์ฌ์ฉํด ๋ ํฐ ์์ ์ต๋ ์ ์๋ฅผ ์ฝ๊ฒ ๊ตฌํ๋ ๊ฒ์ ๋๋ค. ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1) ์ด๊ธฐ๊ฐ ์ค์
- ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ d[0]์ ์ ์ฅํฉ๋๋ค.
- ๋ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์ ์์ ๋ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ฅผ ๋ํ ๊ฐ์ ๋๋ค.
- ์ธ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ ์ฒซ ๋ฒ์งธ ๊ณ๋จ๊ณผ ์ธ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋ ๊ฒฝ์ฐ์ ๋ ๋ฒ์งธ ๊ณ๋จ๊ณผ ์ธ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋ ๊ฒฝ์ฐ ์ค ํฐ ๊ฐ์ ๋๋ค.
2) DP ๋ฐฐ์ด ์ฌ์ฉ
์ต๋ ์ ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด d๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์ d[i]๋ i๋ฒ์งธ ๊ณ๋จ๊น์ง ์ค๋ฅผ ๋ ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ์ ์ฅํฉ๋๋ค.
3) ๋ฐ๋ณต์ ๊ณ์ฐ
4๋ฒ์งธ ๊ณ๋จ๋ถํฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ ํ์์ ์ฌ์ฉํฉ๋๋ค:
- d[i] = max(stair[i] + stair[i-1] + d[i-3], stair[i] + d[i-2])
์ด๋ i๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ๋, i-1๋ฒ์งธ ๊ณ๋จ๋ ๋ฐ๋ ๊ฒฝ์ฐ์ i-2๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋ ๊ฒฝ์ฐ ์ค ๋ ํฐ ๊ฐ์ ์ ํํ์ฌ ๊ณ์ฐํฉ๋๋ค.
4) ์ต์ ํด ๋์ถ
์ต์ข ์ ์ผ๋ก d[N-1]์ด ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ๋ต์ด ๋ฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
N = int(input()) # ๊ณ๋จ์ ์ ์
๋ ฅ
stair = [0] * N # ๊ณ๋จ ์ ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ ์ด๊ธฐํ
for i in range(N):
stair[i] = int(input()) # ๊ฐ ๊ณ๋จ์ ์ ์ ์
๋ ฅ
d = [0] * N # ์ต๋ ์ ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ ์ด๊ธฐํ
for i in range(N):
if i == 0:
d[i] = stair[i] # ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์ ์
elif i == 1:
d[i] = stair[i] + stair[i-1] # ๋ ๋ฒ์งธ ๊ณ๋จ์ ์ ์
elif i == 2:
d[i] = max(stair[i] + stair[i-1], stair[i] + stair[i-2]) # ์ธ ๋ฒ์งธ ๊ณ๋จ ์ ์ ๊ณ์ฐ
else:
# ์ ํ์์ ์ด์ฉํ์ฌ ๊ณ์ฐ
# 1) ์ฐ์๋ ๊ณ๋จ ๋ฐ๋ ๊ฒฝ์ฐ 2) ๋ง์ง๋ง ๊ณ๋จ์์ ๋์นธ๋จ์ด์ง ๊ณ๋จ ๋ฐ๋ ๊ฒฝ์ฐ
d[i] = max(stair[i] + stair[i-1] + d[i-3], stair[i] + d[i-2])
print(d[N-1]) # ๋ง์ง๋ง ๊ณ๋จ์์์ ์ต๋ ์ ์๋ฅผ ์ถ๋ ฅ
4. ์ฝ๋ ์ค๋ช
์ ์ฝ๋๋ ์ฃผ์ด์ง ๊ณ๋จ์ ์ค๋ฅผ ๋ ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ๋์ ๊ณํ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํฉ๋๋ค. d ๋ฐฐ์ด์ ๊ฐ ๊ณ๋จ์ ๋ํด ์ต๋ ์ ์๋ฅผ ์ ์ฅํ๋ฉฐ, ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ d[0]์ ์ ์ฅ๋ฉ๋๋ค.
- ๋ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์ ์์ ๋ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ฅผ ๋ํ ๊ฐ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ์ธ ๋ฒ์งธ ๊ณ๋จ์ ์ ์๋ ์ฒซ ๋ฒ์งธ ๊ณ๋จ๊ณผ ์ธ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋ ๊ฒฝ์ฐ์ ๋ ๋ฒ์งธ ๊ณ๋จ๊ณผ ์ธ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋ ๊ฒฝ์ฐ ์ค ํฐ ๊ฐ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ๋ค ๋ฒ์งธ ๊ณ๋จ๋ถํฐ๋ i๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ๋, i-1๋ฒ์งธ ๊ณ๋จ๋ ๋ฐ๋ ๊ฒฝ์ฐ์ i-2๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๋ ๊ฒฝ์ฐ ์ค ๋ ํฐ ๊ฐ์ ์ ํํ์ฌ ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ง์ง๋ง ๊ณ๋จ์์์ ์ต๋ ์ ์ d[N-1]์ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 1766[๋ฌธ์ ์ง] (0) | 2024.08.05 |
---|---|
BOJ(๋ฐฑ์ค) 1463[1๋ก ๋ง๋ค๊ธฐ] (0) | 2024.08.01 |
BOJ(๋ฐฑ์ค) 4179[๋ถ!] (0) | 2024.07.29 |
BOJ(๋ฐฑ์ค) 1753[์ต๋จ๊ฒฝ๋ก] (0) | 2024.07.26 |
BOJ(๋ฐฑ์ค) 11725[ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ] (0) | 2024.07.25 |