[문제 바로가기] 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의 합으로 나타내는 방법의 수를 출력한다.
큐(Queue) 자료구조를 이용하여 간단하게 풀었다.
같은 숫자의 개수를 사용하더라도 다른 방법으로 카운팅해야하는 것이 핵심이다.
ex) 1+1+2와 1+2+1은 결과는 같지만 다른 방법으로 카운팅한다.
step 1)
deque 라이브러리를 이용하여 queue를 만든다.
이 때, 1, 2, 3 숫자를 이용해서 n을 만들어야 하기 때문에
queue 안에는 [1], [2], [3] 원소를 넣는다.
배열로 넣은 이유는 '순서'를 고려하기 위함이다.
앞서 언급하였듯이 1+2와 2+1은 서로 다른 방법이다.
따라서, [1, 2], [2, 1]처럼 사용한 숫자들을 배열을 이용하여 표현하면 구분할 수 있다.
step 2)
queue의 원소가 존재할 때 까지 아래의 과정을 진행한다.
코드는 다음과 같다.
import sys
from collections import deque
T = int(input())
for tc in range(T):
n = int(input())
queue = deque([[1], [2], [3]])
answer = 0
while queue:
num = queue.popleft()
if sum(num) == n: answer += 1; continue
for number in range(1, 4):
if sum(num) + number == n:
answer += 1
continue
elif sum(num) + number > n:
break
else:
queue.append(num + [number])
print(answer)