정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
import sys
sys.stdin = open("input.text", "rt")
T = int(input())
#n을 1,2,3의 합으로 나타내는 방법의 수
for _ in range(T):
n = int(input())
dp = [0] * (100) #dp[i]는 i값을 만드는데 필요한 1,2,3 방법 개수
dp[1] = 1
dp[2] = 2
dp[3] = 4 #자명한 것들 미리 초기화
for i in range(4,n+1): #마지막 항이 1,2,3으로 끝날때는 생각?
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
print(dp[n])
해당 문제는 1,2,3을 이용해서 합으로 개수를 구하는 것이었는데, DFS로도 풀 수 있을 것 같다. 하지만 나는 일단 dp를 이용해서 풀었다. dp[i]는 i를 만드는데 필요한 1,2,3 합의 경우의 수
그렇기에 dp는 점화식. 즉 규칙성을 파악하는 것이 중요했다.
1,2,3으로 만들 수 있으므로 항상 그 마지막 항이 1,2,3이 될 수 있다.