Coding Test/BaekJoon_Python
백준 9095 <1, 2, 3 더하기> Python
JunOnJuly
2023. 10. 29. 21:03
728x90
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
DP 문제의 전형적인 케이스로 점화식만 찾는다면 쉬운 문제입니다. 맨 앞에 올 수를 고정시킨다는 느낌으로 생각하면 쉽게 구할 수 있습니다.
def solution(n_list):
# 하나씩 받으면 다시 계산해야 하니까 리스로 받아서 계산하자
# 리스트 최댓값
target = max(n_list)
# 메모
memo = [0 for _ in range(target+1)]
# 인덱스 0 은 자신을 더해주는 개념이므로 1 배정
memo[0] = 1
# 인덱스 1 은 하나뿐이므로 미리 작성
memo[1] = 1
# 인덱스 2 는 1 1 / 2 로 2개
memo[2] = 2
i = 3
while True:
# 중단 조건
if i > target:
return [memo[n] for n in n_list]
# n이 n + (n-1) 으로 표현되면 n-1 의 가짓수와 같고
# 2 + (n-2) 으로 표현되면 n-2 의 가짓수와 같음
# 3도 마찬가지
# f(n) = f(n-1) + f(n-2) + f(n-3) 이라고 볼 수 있음
memo[i] = memo[i-1] + memo[i-2] + memo[i-3]
i += 1
T = int(input())
n_list = [int(input()) for _ in range(T)]
for result in solution(n_list):
print(result)
728x90