[BOJ / Python] 9095 1, 2, 3더하기 (Class 3)

효다몬·2022년 9월 26일
0

코딩테스트

목록 보기
21/41
post-thumbnail

문제 링크

성능 요약

메모리: 113112 KB, 시간: 104 ms

분류

다이나믹 프로그래밍(dp)

문제 설명

정수 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까지는 규칙이 따로 없고, 그 뒤부터는 이전 3개의 값을 더해주면 된다.

1, 2, 4, 7, 13, 24, 44 ....

코드

import sys

T = int(sys.stdin.readline())

for _ in range(T) :
    
    N = int(sys.stdin.readline())
    dp = [1] * 12
    dp[2] = 2
    dp[3] = 4
    
    if N > 3 :
        for i in range(3, N + 1) :
            dp[i] = dp[i-3] + dp[i-2] + dp[i-1]
            
    print(dp[N])
profile
개발로 나를 계발하다.

0개의 댓글

관련 채용 정보