알고리즘 연습/브루트 포스
[🥈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)
반응형