🗂️ 문제
링크: https://www.acmicpc.net/problem/9095
💡 접근법
1을 만드는 방법은 1가지이고,
2를 만드는 방법은 (1+1), (2)로 2가지이고,
3을 만드는 방법은 (1+1+1), (2+1)*2, (3)으로 4가지이고,
4를 만드는 방법은 (1+1+1+1), (1+1+2)*3, (1+3)*2, (2+2)로 7가지이고,
5를 만드는 방법은 (1+1+1+1+1), (1+1+1+2)*4, (1+2+2)*3, (3+1+1)*3, (3+2)*2로 13가지이다.
이를 점화식으로 나타내면 dp[i] = dp[i-1] + dp[i-2] + dp[i-3] (N>3)이다.
😎 내 코드
import sys
T = int(sys.stdin.readline())
for _ in range(T):
N = int(sys.stdin.readline())
dp = [0] * (N+1)
for i in range(1, N+1):
if i == 1:
dp[1] = 1
elif i == 2:
dp[2] = 2
elif i == 3:
dp[3] = 4
else:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
print(dp[N])
✅ 정답 확인
'Algorithm > Baekjoon' 카테고리의 다른 글
[이분탐색] 백준 #1654 랜선 자르기 - Python (1) | 2024.05.03 |
---|---|
[이분탐색] 백준 #2805 나무 자르기 - Python (0) | 2024.05.03 |
[DP] 백준 #2579 계단오르기 - Python (0) | 2024.04.06 |
[DP] 백준 #24416 알고리즘 수업 - 피보나치 수 1 - Python (0) | 2024.04.03 |
[완전탐색] 백준 #2529 부등호 - Python (1) | 2024.03.23 |