Python/백준

9019_DSLR

728x90

https://www.acmicpc.net/problem/9019

 

9019번: DSLR

네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에

www.acmicpc.net

 

 

bfs를 활용하면 되는 문제이다.

 

결국 이전 숨바꼭질 문제들과 비슷하게 풀 수 있다.

 

D,S,L,R 연산을 한번씩 한 후에 dp에 넣어주면서 풀면 된다.

 

만약 어떠한 연산으로 200이란 수가 나왔다면 그 다음에 200이 나온 경우에는 queue에 추가하지 않는 방식으로 문제를 풀면 될 것이다.

 

이때 역추적또한 해야하는데, 이전의 데이터를 굳이 넣진 않고 큐 구조에 답을 저장하는 공간을 따로 만들었다.

 

import sys
from collections import deque
input = sys.stdin.readline
T = int(input())

def bfs(a,b):
    q = deque([(a,'')])
    while q:
        num,result = q.popleft()

        if num == b:
            print(result)
            return

        D = (2*num)%10000
        if not dp[D]:
            q.append((D,result+'D'))
            dp[D] = True
        S = (num-1)%10000
        if not dp[S]:
            q.append((S,result+'S'))
            dp[S] = True
        L = (10 * num + (num // 1000)) % 10000
        if not dp[L]:
            q.append((L, result + "L"))
            dp[L] = True

        # 4
        R = (num // 10 + (num % 10) * 1000) % 10000
        if not dp[R]:
            q.append((R, result + "R"))
            dp[R] = True

for _ in range(T):
    a,b = map(int,input().split())
    dp = [False] * 10000
    bfs(a,b)
728x90

'Python > 백준' 카테고리의 다른 글

11700_플로이드2  (0) 2022.04.30
11779_최소비용 구하기 2  (0) 2022.04.29
13913_숨바꼭질  (0) 2022.04.26
9252_LCS2  (0) 2022.04.24
14003_ 가장 긴 증가하는 수열  (0) 2022.04.23