728x90
https://www.acmicpc.net/problem/9019
9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
해당 문제는 너비 우선 탐색으로 문제를 해결한다. 첫 숫자를 큐에 넣고 pop하여 4가지의 연산을 한뒤에 다시 큐에 넣는다.
큐와 팝을 반복을 하면서 B의 숫자가 만들어질때까지 결과값을 구한다. visited처리는 연산한 값으로 visited처리를 하였습니다.
해당 visited값 안에는 연산의 누적 합니다.
from collections import deque
T = int(input())
ops = ['D','S','L','R']
for _ in range(T):
A, B = map(int, input().split())
queue = deque()
queue.append(A) # 값과 빈 배열을 넣는다.
visited = [None for _ in range(10000)]
visited[A] = ''
while queue:
register = queue.popleft()
if register == B: # 만약 조건을 찾는다면
print(visited[B])
break
for op in ops:
if op == 'D': # D연산은 2배를 취한뒤, 9999보다 큰경우에는 10000으로 나눈 나머지 값으로 취한다.
newregister = (register * 2) % 10000
elif op == 'S': # -1을 한 결과를 레지스터리에 넣는다. 레지스터리가 0이라면 9999를 넣는다.
newregister = (register - 1) % 10000
elif op == 'L': # 왼편으로 회전시켜레지스터리에 저장한다.
newregister = (register % 1000) * 10 + register // 1000
elif op == 'R': # 오른편으로 레지스터를 저장한다.
newregister = (register % 10) * 1000 + register // 10
if visited[newregister] is None:
visited[newregister] = visited[register] + op
queue.append(newregister)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1717번 : 집합의 표현 (0) | 2023.08.21 |
---|---|
[백준] 9466번 : 텀 프로젝트 (0) | 2023.08.21 |
[백준] 15683번 : 감시 (0) | 2023.08.18 |
[백준] 1038번 : 감소하는 수 (0) | 2023.08.17 |
[백준] 17142번 : 연구소 3 (0) | 2023.08.16 |