반응형

츄르사려고 코딩하는 코집사입니다.

츄르사려고 코딩하는 코집사입니다.


1, 2, 3 더하기 출처다국어분류

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 51923 33098 21963 61.730%

문제

정수 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 복사

3 4 7 10

예제 출력 1 복사

7 44 274


1. 제출코드


T = int(input())

def sol(n) : 
    if n == 1 :
        return 1
    
    elif n == 2 :
        return 2
    
    elif n == 3 :
        return 4
    
    else :
        return sol(n-1) + sol(n-2) + sol(n-3)

for i in range(T) : 
    n = int(input())
    print(sol(n))

2. 문제풀이


이 문제는 DP(Dynamic Programming) 문제이다.

이 문제를 풀 때 DP 접근을 위해 패턴이나 규칙을 찾기 위해 경우의 수를 풀어서 썼다.

 

1 -> (1) -> 1개

2 -> (1+1), (2) -> 2개

3 -> (1+1+1), (1+2), (2+1), (3) -> 4개

4 -> (1+1+1+1), (1+1+2), (1+2+1), (1+3), (2+1+1), (2+2), (3+1) -> 7개

5 -> (1+1+1+1+1), (1+1+1+2), (1+1+2+1), (1+1+3), (1+2+1+1), (2+1+1+1), (1+2+2), (2+1+2), (2+2+1), (1+3+1), (3+1+1), (2+3), (3+2) -> 13개

 

위의 규칙을 봤을 때, 4번째 경우의 수는 첫 번째와 두 번째, 세 번째 경우의 수를 합한 것과 같다는 것.

5번째 경우의 수는 2, 3, 4번째 경우의 수의 합과 같다는 것을 볼 수 있다.

 

따라서, 위의 규칙을 보면 하나의 점화식이 나온다.

n이 3보다 클 때(n>3), f(n) = f(n-1) + f(n-2) + f(n-3)

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기