알고리즘/백준

백준-9095-1, 2, 3 더하기

hong2943 2024. 6. 17. 18:49
구현
  • 1,2,3으로 더할 수 있는 케이스를 숫자별로 나열해보면 아래와 같다.
숫자 : 개수  : 케이스
1    :  1   :  1
2    :  2   :  1 1 , 2
3    :  4   :  1 1 1 , 1 2 , 2 1 , 3
4    :  7   :  1 1 1 1 , 1 1 2 , 1 2 1 , 2 1 1 , 2 2 , 1 3 , 3 1
5    :  13  :  1 1 1 1 1 , 1 1 1 2 , 1 1 2 1 , 1 2 1 1 , 2 1 1 1 , 2 2 1 , 2 1 2 , 1 2 2 , 2 3 , 3 2 , 3 1 1 , 1 3 1 , 1 1 3

 

  • 숫자 4, 5 부터 규칙이 보이기 시작한다.
규칙
4는 1+2+3 = 7개
5는 2+3+4 = 13개
    '
    '
    '

 

  • 이를 점화식으로 바꾸어 보면 아래와 같이 만들 수 있다.
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

 


코드

T = int(input())

for _ in range(T):
    # 입력될 n은 1~10
    dp = [0 for i in range(11)]

    # 점화식에 따라 1,2,3은 고정
    dp[1] = 1
    dp[2] = 2
    dp[3] = 4

    n = int(input())

    for i in range(4, n+1):
        dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
    
    print(dp[n])

 

DP를 공부한 후 개념을 적용해볼 수 있는 좋은 문제였던 것 같다.

 

문제링크

'알고리즘 > 백준' 카테고리의 다른 글

백준-14248-점프 점프  (0) 2024.06.25
백준-1541-잃어버린 괄호  (0) 2024.06.18
백준-2775-부녀회장이 될테야  (0) 2024.06.03
백준-2606-바이러스  (0) 2024.05.03
백준-1914-하노이 탑  (0) 2024.04.30