문제
정수 n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하라.
풀이
n=1일 경우 1, n=2일 경우 1+1와 2, n=3일 경우 1+1+1와 1+2와 2+1와 3가 가능하다.
마지막에 3을 더하는 경우는 n-3까지를 나타내는 방법의 수와 같으므로 dp[n-3]와 같다.
2를 더하는 경우는 dp[n-2], 1을 더하는 경우는 dp[n-1]와 같다.
dp[n]은 이 세 경우 모두 포함하므로 dp[n]=dp[n-3]+dp[n-2]+dp[n-1]이다.
코드
import sys
input=sys.stdin.readline
t=int(input())
for _ in range(t):
n=int(input())
dp=[0]*(n+1)
dp[1]=1
if n>=2:
dp[2]=2
if n>=3:
dp[3]=4
for i in range(4,n+1):
dp[i]=dp[i-3]+dp[i-2]+dp[i-1]
print(dp[n])
'BOJ > Python' 카테고리의 다른 글
[BOJ/백준] 10825 - 국영수 (Python) (0) | 2025.02.05 |
---|---|
[BOJ/백준] 10844 - 쉬운 계단 수 (Python) (0) | 2025.02.05 |
[BOJ/백준] 11727 - 2×n 타일링 2 (Python) (1) | 2025.02.02 |
[BOJ/백준] 11726 - 2×n 타일링 (Python) (0) | 2025.02.02 |
[BOJ/백준] 1463 - 1로 만들기 (Python) (0) | 2025.02.02 |