[다이내믹 프로그래밍] 백준 9095번 1, 2, 3 더하기 [Python]
알고리즘/python 2022. 11. 10. 17:31정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
내가 작성한 답:
t = int(input())
dp = [0 for i in range(12)]
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in range(4, len(dp)) :
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
for i in range(t) :
n = int(input())
print(dp[n])
합이라길래 의심 없이 두 개 이상의 숫자가 합해지는 줄 알았더니
문제에 [합을 나타낼 때는 수를 1개 이상 사용해야 한다.] 이런 말을 넣어놔서 1개 단독으로도 카운트가 되는 거였다.
이것 때문에 한참 헤맸다.
4부터는 n을 구하고자 하는 수라 했을 때, 1, 2, 3을 사용한 숫자의 합으로만 표현해야 하므로
경우의 수는
1. (n - 1) 의 경우의 수 (끝에 1씩 더해줌)
2. (n - 2) 의 경우의 수 (끝에 2씩 더해줌)
3. (n - 3) 의 경우의 수 (끝에 3씩 더해줌)
이렇게 된다.
[비트연산] 소프티어 lv.3 CPTI [Python] (0) | 2025.04.18 |
---|---|
[BFS] 백준 2178번 미로 탐색 [Python] (0) | 2025.04.04 |
[다이내믹 프로그래밍] 백준 11726번 2xn 타일링 [Python] (0) | 2022.11.10 |