import sys
from collections import deque
sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline
T = int(input())
for _ in range(T):
A, B = map(int, input().split())
queue = deque()
answer = [0,0,0,0]
queue.append([A, 'D'])
queue.append([A, 'S'])
queue.append([A, 'L'])
queue.append([A, 'R'])
def bfs():
while queue:
num, register = queue.popleft()
if num == B:
return register
if register == 'D':
d = num * 2
if d > 9999:
d = d % 10000
answer[0] += 1
queue.append([d, 'D'])
elif register == 'S':
s = num - 1
if num == 0:
s = 9999
answer[1] += 1
queue.append([s, 'S'])
elif register == 'L':
l = int(num % 1000 * 10 + num // 1000)
answer[2] += 1
queue.append([l, 'L'])
elif register == 'R':
r = int(num % 10 * 1000 + num // 10)
answer[3] += 1
queue.append([r, 'R'])
response = bfs()
if response == 'D':
print('D' * answer[0])
elif response == 'S':
print('S' * answer[1])
elif response == 'L':
print('L' * answer[2])
elif response == 'R':
print('R' * answer[3])
나름 열심히 머리를 굴려서 풀었는데 로컬에서는 성공인데 백준에서는 실패가 뜬다.. 내가 생각치 못한 부분이 있었겠지..
from collections import deque
import sys
input = sys.stdin.readline
for _ in range(int(input())):
A,B = map(int,input().split())
q = deque()
q.append((A,""))
visit = [False] * 10000 # 값 저장
while q:
num, path = q.popleft()
visit[num] = True
if num == B: # 결과가 만들어 졌을 때 종료
print(path)
break
# 1번 조건 D
num2 = (2*num)%10000
if not visit[num2]:
q.append((num2,path+"D"))
visit[num2] = True
# 2번 조건 S
num2 = (num-1)%10000
if not visit[num2]:
q.append((num2,path+"S"))
visit[num2] = True
# 3번 조건 L
num2 = (10*num+(num//1000))%10000
if not visit[num2]:
q.append((num2,path+"L"))
visit[num2] = True
# 4번 조건 R
num2 = (num//10+(num%10)*1000)%10000
if not visit[num2]:
q.append((num2,path+"R"))
visit[num2] = True
맙소사.. 한가지의 레지스터가 아니라 조합해서 답을 구하는 것이었다.
visited * 10000 리스트를 만들어서 방문을 체크한다. 어느 레지스터든 그 숫자가 나왔으면 방문처리를 해주고 path경로에 더해준다.