문제
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
문제 요약
정수 n을 입력 받고, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
(1 ≤ n ≤ 10)
ex) 정수 4를 1, 2, 3의 합으로 나타내는 방법
1 + 1 + 1 + 1
1 + 1 + 2
1 + 2 + 1
2 + 1 + 1
2 + 2
1 + 3
3 + 1
코드
T = int(input())
dp =[0] * (11)
# dp[i]는 정수 i까지 1, 2, 3으로 나타낼 수 있는 방법의 수
dp[1] = 1 # 1
dp[2] = 2 # 1 + 1, 2
dp[3] = 4 # 1 + 1 + 1, 1 + 2, 2 + 1, 3
for i in range(4, 11):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
for _ in range(T):
n = int(input())
print(dp[n])
코드 설명
정수 i를 1, 2, 3으로 나타내는 방법의 수는 정수 i - 1, i - 2, i - 3을 1, 2, 3으로 나타낸 방법의 수를 더한 값과 같다.
4를 i라고 했을 때, i - 1, i - 2, i - 3은 각각 3, 2, 1이다.
3을 1, 2, 3으로 나타낸 방법은
1 + 1 + 1
1 + 2
2 + 1
3
이다.
3을 1, 2, 3으로 나타낸 방법에 1을 더하면 4를 1, 2, 3으로 나타낸 방법이다.
1 + 1 + 1 + 1
1 + 2 + 1
2 + 1 + 1
3 + 1
같은 방법으로
2를 1, 2, 3으로 나타낸 방법은
1 + 1
2
이다.
2를 1, 2, 3으로 나타낸 방법에 2을 더하면 4를 1, 2, 3으로 나타낸 방법이다.
1 + 1 + 2
2 + 2
마지막으로
1을 1, 2, 3으로 나타낸 방법은
1
이다.
1을 1, 2, 3으로 나타낸 방법에 3을 더하면 4를 1, 2, 3으로 나타낸 방법이다.
1 + 3
따라서 4를 1, 2, 3으로 나타낼 수 있는 방법은 4가지 + 2가지 + 1가지 총 7가지이다.
코드 상으로는 메모이제이션 테이블 dp에 1부터 10까지 1, 2, 3으로 나타낼 수 있는 방법을 미리 저장하고, 입력 받은 정수 n에 해당하는 dp[n]값을 출력한다.
'Algorithm Problems > 다이나믹 프로그래밍' 카테고리의 다른 글
[백준/Python] 14501번: 퇴사 (2) | 2023.10.07 |
---|---|
[백준/Python] 2×n 타일링 (0) | 2023.10.06 |
[백준/Python] 1149번: RGB거리 (0) | 2023.10.03 |
[백준/Python] 25706번: 자전거 묘기 (3) | 2023.09.17 |
[백준/Python] 18353번: 병사 배치하기 (53) | 2023.09.16 |