코테 공부/백준
[Python/DP] 9095 1,2,3 더하기
prefer_all
2022. 8. 8. 22:42
문제
정수 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은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
입력 예시 | 출력 예시 |
3 4 7 10 |
7 44 274 |
풀이
1. DP 문제임을 확인
- 어떤 항을 구하기 위한 전 항들을 완벽히 구할 수 있고, 그 항들을 이용하여 정의에 맞는 현재 항이 깔끔하게 정의가 됨
2. 패턴 찾기
인덱스 n에 대해서 n을 1,2,3의 합으로 나타낼 수 있는 방법의 수를 f(n)이라고 할 때
f(n) = f(n-1) + f(n-2) + f(n-3)
방법 1) 피보나치 이용
num = int(input())
def f(n):
if n == 1:
return (1)
elif n == 2:
return (2)
elif n == 3:
return (4)
else:
return f(n-1)+f(n-2)+f(n-3)
for i in range(num):
n = int(input())
print(f(n))
방법 2) 입력받은 n에 대하여 매번 list를 만들기
num = int(input())
for i in range(num):
n = int(input())
n_list = [0]*(n+1)
if n == 1 :
print(1)
elif n == 2 :
print(2)
elif n == 3 :
print(4)
else:
n_list[1] = 1
n_list[2] = 2
n_list[3] = 4
for j in range(4, n+1):
n_list[j] = n_list[j-1] + n_list[j-2] + n_list[j-3]
print(n_list[n])