โ 1์ฐจ ํ์ด
from itertools import product
def solution(n):
num_list = [1, 2]
count = 0
for i in range(1, n + 1):
for perm in product(num_list, repeat=i):
if sum(perm) == n:
count += 1
continue
return count % 1234567
๋ชจ๋ ์กฐํฉ์ ์ค๋ณต์ด ๊ฐ๋ฅํ product๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค๊ณ , ๊ทธ ํฉ์ด n์ด ๋๋ฉด ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ณด์๋ค.
์ญ์๋, ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค.
์ด ๋ฌธ์ ์นดํ ๊ณ ๋ฆฌ๊ฐ DP์ธ๋ฐ, ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ํ์ ํ์ธ ํผ๋ณด๋์น์ ๊ฐ์ ํจํด์ ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ์๋ค.
n=1
(1)
n=2
(1,1)
(2)
n=3
(1,1,1)
(1,2)
(2,1)
n=4
(1,1,1,1)
(1,2,1)
(2,1,1)
(1,1,2)
(2,2)
โ ์ ๋ตํ์ด
def solution(n):
answer=0
dp1, dp2=1,1
for i in range(2,n+1):
dp1,dp2=dp1+dp2,dp1
return dp1%1234567
n=4๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด์์๋, ์ด์ ๊ฐ(n=3)์ 1์ ์ถ๊ฐ, 2๋ฒ์งธ ์ด์ ๊ฐ(n=2)์ 2๋ฅผ ์ถ๊ฐํ๋ ํจํด์ ๊ฐ์ง๊ณ ์๋๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ์ ๊ตฌํ๋๊ฒ์ด ์๋ ์นด์ดํธ๋ฅผ ๊ตฌํ๋ฉด๋๊ธฐ ๋๋ฌธ์ dp[n]=dp[n-1]+dp[n-2] ์ด๋ฐ์์ผ๋ก ์ ํ์์ ๊ตฌํ๋ฉด๋๋ค.
์นด์ดํธ๋งํ๋ฉด๋๋ฏ๋ก, ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๊ณ , ๋ณ์๋ก ์ซ์๋ง ๋ํด์ฃผ์๋ค.
โ 1์ฐจ ํ์ด
from itertools import product
def solution(n):
num_list = [1, 2]
count = 0
for i in range(1, n + 1):
for perm in product(num_list, repeat=i):
if sum(perm) == n:
count += 1
continue
return count % 1234567
๋ชจ๋ ์กฐํฉ์ ์ค๋ณต์ด ๊ฐ๋ฅํ product๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค๊ณ , ๊ทธ ํฉ์ด n์ด ๋๋ฉด ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ณด์๋ค.
์ญ์๋, ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค.
์ด ๋ฌธ์ ์นดํ ๊ณ ๋ฆฌ๊ฐ DP์ธ๋ฐ, ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ํ์ ํ์ธ ํผ๋ณด๋์น์ ๊ฐ์ ํจํด์ ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ์๋ค.
n=1
(1)
n=2
(1,1)
(2)
n=3
(1,1,1)
(1,2)
(2,1)
n=4
(1,1,1,1)
(1,2,1)
(2,1,1)
(1,1,2)
(2,2)
โ ์ ๋ตํ์ด
def solution(n):
answer=0
dp1, dp2=1,1
for i in range(2,n+1):
dp1,dp2=dp1+dp2,dp1
return dp1%1234567
n=4๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด์์๋, ์ด์ ๊ฐ(n=3)์ 1์ ์ถ๊ฐ, 2๋ฒ์งธ ์ด์ ๊ฐ(n=2)์ 2๋ฅผ ์ถ๊ฐํ๋ ํจํด์ ๊ฐ์ง๊ณ ์๋๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ์ ๊ตฌํ๋๊ฒ์ด ์๋ ์นด์ดํธ๋ฅผ ๊ตฌํ๋ฉด๋๊ธฐ ๋๋ฌธ์ dp[n]=dp[n-1]+dp[n-2] ์ด๋ฐ์์ผ๋ก ์ ํ์์ ๊ตฌํ๋ฉด๋๋ค.
์นด์ดํธ๋งํ๋ฉด๋๋ฏ๋ก, ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๊ณ , ๋ณ์๋ก ์ซ์๋ง ๋ํด์ฃผ์๋ค.