https://www.acmicpc.net/problem/9095
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의 합으로 나타내는 방법의 수를 출력한다.
접근 방법
n의 개수가 그리 많지 않으므로 중복 순열을 이용해 구했다. 즉, [1,2,3]으로 만들 수 있는 1~3 길이의 중복 순열을 만들고, 합이 n이 되는 경우를 카운트했다. 그리고 (1,1,1)인 경우를 따로 더해주었다.
# 백준 1, 2, 3 더하기 https://www.acmicpc.net/problem/9095
# 정수 n을 1,2,3의 합으로 나타내는 방법의 수를 구하라.
from itertools import product
t = int(input())
for _ in range(t):
n = int(input())
cnt = 0
permu = []
for i in range(1,n):
tmp = list(product([1,2,3], repeat=i))
permu.extend(tmp)
for p in permu:
if sum(p) == n:
cnt += 1
print(cnt+1) # 1만으로 이루어진 합 더하기
728x90
'알고리즘' 카테고리의 다른 글
[백준 1463] 1로 만들기 (실버 3) Python (0) | 2023.04.18 |
---|---|
[백준 11659] 구간 합 구하기 4 (실버 3) Python (0) | 2023.04.18 |
[백준] 11866 요세푸스 문제 0 (0) | 2023.04.17 |
[백준] 10866 덱 (실버 4) Python (0) | 2023.04.17 |
[백준] 최소비용 구하기 (골드 5) Python (0) | 2023.04.16 |