알고리즘 연습/브루트 포스

[🥈3 / 백준 9095 / 파이썬] 1, 2, 3 더하기

김세진 2021. 7. 13. 21:22
반응형
 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

 

문제

정수 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 4 7 10

예제 출력

7 44 274

 

 

풀이

 

주어진 정수를 1, 2, 3 의 합으로 나타내는 방법의 가짓수를 찾는 문제이다.

 

다이나믹 프로그래밍으로 풀 수 있지만, n이 작아 재귀로도 문제없을 것 같아서

 

모든 경우의 수를 검사하는 브루트 포스 알고리즘을 활용했다.

 

만약 다이나믹 프로그래밍으로 풀려면, dp(n) = dp(n-3) + dp(n-2) + dp(n-1) 의 공식을 이용할 수 있다.

 

for i in range(int(input())):
    n = int(input())

    count = 0
    def bf(t):
        global count
        if t == n:
            count += 1
            return

        for i in range(1,4):
            if t+i > n:
                return
            bf(t+i)

    bf(0)
    print(count)
반응형