[BOJ][๐ก4][๋ฐฑ์ค#14852] ํ์ผ ์ฑ์ฐ๊ธฐ 3
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
2รN ํฌ๊ธฐ์ ๋ฒฝ์ 2ร1, 1ร2,ย 1ร1ย ํฌ๊ธฐ์ ํ์ผ๋ก ์ฑ์ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผย ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1 โค N โค 1,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ 1,000,000,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
1
์ถ๋ ฅ
2
์์ 2
์ ๋ ฅ
2
์ถ๋ ฅ
7
์์ 3
์ ๋ ฅ
3
์ถ๋ ฅ
22
My Sol
def main():
M = 1000000007
ans = [0, 2, 7]
N = int(input())
if N < 3: return ans[N]
cnt, cross = 2, 1
a, b, c = ans
while cnt < N:
new_c = (2*cross+3*b+2*c)%M
a, b, c = b, c, new_c
cnt += 1
cross += a
cross %= M
return c
print(main())
DP๋ฅผ ํ์ฉํด ํธ๋ ๋ฌธ์ ์๋ค.
๋ฌธ์ ํ์ด์ ๊ด๊ฑด์ dp[N-3] ~ dp[1]
์์ญ์ฒ๋ผ ๊ต์ฐจํด์ ๋ฐ๋ณต๋๋ ๊ฒ์ด๋ค. ์ด๋ 2๊ฐ์ง์ฉ ์ด๊ณ , dp[N-3]
๋ถํฐ dp[1]
๊น์ง ๊ฐ์์ 2๋ฐฐ์ฉ ํ์ฌ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํด์ฃผ์ด์ผ ํ๋ค.
๋ํ ๋๋ค๋ฅธ ๋ ธํ์ฐ๋ ๋ชจ๋ dp ๋ฐฐ์ด์ ์ ์ฅํ๋ ๊ฒ์ด ์๋, pythonicํ๊ฒ ๋ณ์ 3๊ฐ๋ก ์ด์ ๊ฐ์ ๋ฏธ๋ฃจ๋ฉฐ ์ ์ฅ, ๊ฐฑ์ ํ์ฌ ํ์ด๋ธ ๊ฒ์ด๋ค.
new_c = (2*cross+3*b+2*c)%M
a, b, c = b, c, new_c
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ