https://www.acmicpc.net/problem/16922
풀이 과정
- 사용 가능한 로마 숫자가 1, 5, 10, 50이며, N개의 숫자를 모두 사용했을 때 서로 다른 수의 개수를 출력
- 따라서, 너비우선 탐색을 통해 만들 수 있는 서로 다른 수를 모두 구해준다.
- 중복이 있을 수 있으므로 SET 자료구조를 사용한다.
- 큐에 있는 각 숫자들을 하나씩 빼면서 1, 5, 10, 50을 더한 값을 중복 제거를 위해 임시로 set에 넣어준다.
- 큐가 비게 되면, set에 있는 값들을 큐에 넣어준다.
- 2-3 과정을 N번 반복해준 다음 최종적으로 set에 저장된 값의 개수를 출력시켜 준다.
소스 코드
import sys
from collections import deque
input = lambda: sys.stdin.readline().rstrip()
n = int(input())
numbers = [1, 5, 10, 50]
def solve():
queue = deque([0])
step = 0
middle = set()
answer = set()
while True:
x = queue.popleft()
for num in numbers:
middle.add(x+num)
if not queue:
step += 1
if step == n:
answer = middle
break
else:
queue = deque(middle)
middle = set()
return len(answer)
print(solve())
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 2933 ] [ 구현 ] 미네랄 (0) | 2021.12.09 |
---|---|
[ 3151 ] [ 이진 탐색 ] 합이 0 (0) | 2021.12.01 |
[ 23630 ] 가장 긴 부분 수열 구하기 (0) | 2021.11.25 |
[ 1013 ] [ DFA ] Contact (0) | 2021.11.23 |
[ 14712 ] [ backtracking ] 넴모넴모(Easy) (0) | 2021.11.20 |