[Python] 백준 / 1, 2, 3 더하기 3 / 15988번 / DP
문제
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 1,000,000보다 작거나 같다.
3
4
7
10
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.
7
44
274
접근 방식
dp 값은 1,2,3의 합으로 나타낼 수 있는 경우의 수
1,2,3의 합으로 4를 나타낼 경우의 수는
4 - 3 의 경우의 수에서 오른쪽에 1을 더하면 되므로 결국 4 - 3 의 경우의 수를 더하고
4 - 2 의 경우의 수에서 오른쪽에 2를 더하면 되므로 결국 4 - 2 의 경우의 수를 더하고
4 - 1 의 경우의 수에서 오른쪽에 3을 더하면 되므로 결국 4 - 1 의 경우의 수를 더하면
정답을 구할 수 있다.
-
dp를 최대 크기만큼 0으로 초기화한다
-
1부터 3까지 1, 2, 3의 합으로 나타낼 수 있는 경우의 수 초기값을 넣는다
-
dp[4] 부터는 num - 3 의 모든 경우의 수와 num - 2 의 모든 경우의 수, num - 1 의 모든 경우의 수를 더하면 된다
-
테스트 케이스를 입력받고 바로 dp 값을 출력한다
코드
import sys
t = int(input())
dp = [0] * (1000001)
dp[1] = 1
dp[2] = 2
dp[3] = 4
# 미리 dp 전체를 계산
for i in range(4, 1000001):
dp[i] = (dp[i-3] + dp[i-2] + dp[i-1]) % 1000000009
for _ in range(t):
num = int(sys.stdin.readline())
print(dp[num])
Author And Source
이 문제에 관하여([Python] 백준 / 1, 2, 3 더하기 3 / 15988번 / DP), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gandi0330/Python-백준-1-2-3-더하기-3-15988번-DP저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)