๐ฑ ๋ฌธ์
https://www.acmicpc.net/problem/2579
๐ก ์ค๋ช
ํ์๋ ํด๋น ๋ฌธ์ ๋ฅผ BFS๋ก ํด๊ฒฐํ๋ ค ํ์ผ๋ ์ฑ์ 7% ์์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
์๋ฌด๋ฆฌ n์ด 300์ด๋ผ๊ณ ํด๋ ์ฃผ์ด์ง ๋ฉ๋ชจ๋ฆฌ๊ฐ 128MB์ธ ์ํฉ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์๊ตฌํ๋ BFS๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์์ต๋๋ค.
๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(DP)๋ก ์ ๊ทผ์ ์๋ํ์์ต๋๋ค.
Memoization ๊ธฐ๋ฒ์ ํตํด ์ด์ ์ ๊ตฌํ ์ต์ ๊ฐ(ํด๋น ์ธต๊น์ง ๊ตฌํ ์ต๋ ์ค์ฝ์ด)์ dp ๋ฐฐ์ด์ ๊ธฐ๋กํด๋๊ณ ํ ์ธต์ฉ ๋์ฌ๊ฐ๋ฉฐ ํด๊ฒฐํ์์ต๋๋ค.
์ฐ์ ์ ํ์์ ์ธ์์ฃผ๊ธฐ ์ํด ๋ฌธ์ ์์ ์ ์ํ๋ ์กฐ๊ฑด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๊ณ๋จ์ ํ ๋ฒ์ ํ ์ธต ๋๋ ๋ ์ธต ์ด๋ ํ ์ ์์ต๋๋ค.
- ์ธต์ ์ธ ๋ฒ ์ฐ์ํ์ฌ ์ด๋ํ ์ ์์ต๋๋ค. (4์ธต -> 5์ธต -> 6์ธต ์ด๋๊ณผ ๊ฐ์ ์์ง์์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ.)
- ๋์ฐฉํ๊ณ ์ ํ๋ ์ธต์ ๋ฐ์์ผ๋ง ํฉ๋๋ค.
ํด๋น ์กฐ๊ฑด์ ๊ทธ๋ฆผ์ผ๋ก ๋์ํ ํด๋ณด๋ฉด ํฌ๊ฒ ํ๋์ ๊ฒฝ๋ก์ ์ด๋ก์ ๊ฒฝ๋ก 2๊ฐ์ง๋ก ํํํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ค๊ณํ๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์ ๋ชจ๋ ์ธต์ ํ์ธํด๋ณด๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด๋ผ ์ ์์ต๋๋ค.
- ํ๋์ ๊ฒฝ๋ก๋ 3๊ฐ์ ์ธต์ ์ฐ์ํด์ ๊ฑฐ์น์ง ์๊ธฐ ์ํด ์ ์ด์ 2์นธ์ฉ ์ด๋ํ๋ ๊ฒฝ์ฐ
- ์ด๋ก์ ๊ฒฝ๋ก๋ 3๊ฐ์ ์ธต์ ์ฐ์ํด์ ๊ฑฐ์น์ง ์๊ธฐ ์ํด ๋์นธ ์ด๋ํ๊ณ ํ ์นธ ์ด๋ํ๋ ๊ฒฝ์ฐ
์ ํ์์ ์๋์ ๊ฐ์ต๋๋ค.
- DP[i] = max(arr[i] + dp[i-2], arr[i] + arr[i-1] + dp[i-3])
ํ์ด๋ฅผ ์ํด์ ์ฐ์ Base๊ฐ ๋๋ 1์ธต, 2์ธต, 3์ธต์ ๋ํ ์ต๋ ๊ฐ์ ๊ตฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ 4์ธต๋ถํฐ n์ธต๊น์ง ์ ์ ํ์์ ๋ฐ๋ณตํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด๋ผ ์ ์์ต๋๋ค.
โ๏ธ ์์ค์ฝ๋
n = int(input())
arr = [0] + [int(input()) for _ in range(n)]
dp = [0] * (n+1)
if n == 1: print(arr[1])
elif n == 2: print(arr[1] + arr[2])
else:
dp[1] = arr[1]
dp[2] = arr[1] + arr[2]
dp[3] = max(arr[1] + arr[3], arr[2] + arr[3])
# ๊ณ์ 2์นธ์ฉ or 1์นธ + 2์นธ ๋ฐ๋ณต
for i in range(4, n+1):
dp[i] = max(arr[i] + dp[i-2], arr[i] + arr[i-1] + dp[i-3])
print(dp[n])
github : https://github.com/tmdgh1592
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค - Python] 1697๋ฒ : ์จ๋ฐ๊ผญ์ง (0) | 2022.09.27 |
---|---|
[๋ฐฑ์ค - Python] 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (1) | 2022.09.20 |
[๋ฐฑ์ค - Python] 2671๋ฒ : ์ ์ํจ์๋ณ (0) | 2022.09.14 |
[๋ฐฑ์ค/ํ์ด์ฌ] 1004๋ฒ ๋ฌธ์ '์ด๋ฆฐ ์์' (14) | 2021.06.11 |
[๋ฐฑ์ค/ํ์ด์ฌ] 1003๋ฒ ๋ฌธ์ 'ํผ๋ณด๋์น ํจ์' (16) | 2021.06.10 |