[BOJ][๐ก4][๋ฐฑ์ค#02133] ํ์ผ ์ฑ์ฐ๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
3รN ํฌ๊ธฐ์ ๋ฒฝ์ 2ร1, 1ร2 ํฌ๊ธฐ์ ํ์ผ๋ก ์ฑ์ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผย ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1 โค N โค 30)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
2
์ถ๋ ฅ
3
My Sol
def main():
N = int(input())
if N%2: return 0
M = max(N+1, 3)
T = [0]*M
T[2] = 3
i = 4
acc = 1
while i<=N:
T[i] = 3*T[i-2] + 2*acc
acc += T[i-2]
i += 2
return T[N]
print(main())
DP๋ฅผ ์ฌ์ฉํ๋ ๋ํ ๋ฌธ์ ์ธ ํ์ผ ๋ฌธ์ ์ ์์ฉ ๋ฌธ์ ์๋ค.
- N์ ์ ๋ ฅ๋ฐ๋๋ฐ, N์ด ํ์์ด๋ฉด ํ์xํ์=ํ์ ์ด๋ฏ๋ก ๋์ด๊ฐ 2 ๋จ์์ธ ๋ธ๋ญ๋ค๋ก ์ฑ์ธ ์ ์์ด ํญ์ ๊ฒฝ์ฐ์ ์๋ 0์ด๋ค. ์ด๋ฅผ ๊ฐ์ง์น๊ธฐ ํด์ค๋ค.
- DP ๋ฐฐ์ด์
T
๋ก ๋๊ณ ์ด๊ธฐํ ํ ๋ค, ๊ธธ์ด๊ฐ 2์ธ ๊ฒฝ์ฐ 3๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์์์ ์ด๊ธฐํํ๋ค. - ๋๋น๊ฐ N์ธ ๊ฒฝ์ฐ(
T[N]
) ๋๋น๊ฐ N-2์ธ ๊ฒฝ์ฐ(T[N-2]
)์ธ ๊ฒฝ์ฐ์ ๋๋น๊ฐ 2์ธ ๊ฒฝ์ฐ, 3๊ฐ์ง๋ฅผ ๊ณฑํ3T[N-2]
์ ํจ๊ป ์๋ก ๊ต์ฐจํ๋ ๊ฒฝ์ฐ๋ฅผacc
์ ๋์ ํ์ฌ ๋ํด์ฃผ๋ฉฐ ๊ณฑํ๋ค.acc
์ 2๋ฅผ ๊ณฑํดT[n]
์ ๋ํ๋ ์ด์ ๋, ๋์ฒด ๋ถ๊ฐ๋ฅํ ๊ต์ฐจ ๋ธ๋ญ์ 2x1๋ก ๊ณ์ ์ด์ด์ง ๊ฐ๋ก์ค์ด ์, ์๋ 2๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์ด๊ฒ์ด ์ค๊ฐ์ 3์ฐ์ ์ด์ด์ ธ ๋งค๋๋ฝ๊ฒ ์๋ผ๋ผ ์ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์์ 3์ฉ ๊ณฑํ๋ ์ฐ๊ฒฐ์ ํฌํจ๋๋ฏ๋ก ์ด๋ ์ ์ธํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ