ps/boj

9095번 Python

choi-dev 2024. 8. 20. 01:31
import sys

cnt = int(sys.stdin.readline())
dp = [0] * 11
dp[1] = 1
dp[2] = 2
dp[3] = 4

for i in range(4, 11):
    dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]

for i in range(cnt + 1):
    n = int(sys.stdin.readline())
    print(dp[n])

코드부터 구성하자면 다음과 같이 구성했다.

 

1 -> 1 # 1
2 -> 1 + 1, 2 # 2
3 -> 1 + 1 + 1, 1 + 2, 2 + 1, 3 # 4

많은 사람들이 블로그에 올린 걸 보면 1, 2, 3번째 인덱스에 왜 1, 2, 4를 넣는지 잘 모르는 것 같다. 문제에서 합을 나타날 때는 1개 이상의 수를 사용하라고 적혀있다. (사실 이걸 못보고 1을 0으로 했다가 애먹었다.) 그렇기 때문에 1을 만들 수 있는 경우는 1, 2는 2은 4가 된다. 

 

여기서 4는 7이라고 나와있는데 이는 1, 2, 3의 인덱스를 모두 더한 것과 같다.

 

'1 + 1 + 1' + 1
'1 + 2' + 1
'2 + 1' + 1
'3' + 1
'1 + 1' + 2
'2' + 2
'1' + 3

''로 표시한 부분이 전부 1, 2, 3에 해당하는 해를 의미한다. 단순히 거기에 숫자만 더해줬을뿐 실제로는 i 아래의 3개 인덱스를 모두 더한 것이 결국 점화식이 된다.