less than 1 minute read

백준 문제 중 9095번

https://www.acmicpc.net/problem/9095

문제

정수 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의 합으로 나타내는 방법의 수를 출력한다.


풀이

문제의 핵심은 1,2,3 에서 3까지만 표현가능하다는 것이다.

n을 1,2,3 으로 나타내는 방법을 구하는 함수를 case(n)라 할때,
4의 경우 (1+1+1)+1, (1+1)+2, (1)+3 이고 각각 (1+1+1)은 case(3), (1+1)은 case(2), (1)은 case(1) 과 같으므로

case(4)=case(3)+case(2)+case(1) 을 만족한다.

이를 코드로 작성해보면 아래와 같다.

from collections import defaultdict

import sys

n = int(input())
m = [None]*n

for i in range(n): m[i] = int(input())

dp = defaultdict(int)
dp[1],dp[2],dp[3] = 1,2,4

def case(n:int)->int:

    if dp[n]:
        return dp[n]
    
    dp[n] = case(n-1)+case(n-2)+case(n-3)
    return dp[n]

for i in range(n): print(case(m[i]))
3
4
7
10
7
44
274

Leave a comment