cs [파이썬] 백준 9019번 : DSLR
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/PYTHON 알고리즘 연습

[파이썬] 백준 9019번 : DSLR

by 시몬쯔 2020. 2. 15.
728x90
반응형

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

 

9019번: DSLR

문제 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 저장된 n을 다음과 같이 변환한다. n의 네 자릿수를 d1, d2, d3, d4라고 하자(즉 n = ((d1 × 10 + d2) × 10 + d3) × 10 + d4라고 하자) D: D 는 n을 두 배로 바꾼다. 결과 값이 9999 보다 큰 경

www.acmicpc.net

 

 

from collections import deque




# def f_D(A):

#     return A*2 % 10000,'D'

# def f_S(A):

#     if A==0:

#         return 9999,'S'

#     else:

#         return A-1,'S'

# def f_L(A):

#     A = list(str(A))

#     temp = A[0]

#     del A[0]

#     A.append(temp)

#     A = ''.join(A)

#     return int(A),'L'

 

# def f_R(A):

#     A = list(str(A))

#     temp = A[-1]

#     del A[-1]

#     A.insert(0,temp)

#     A = ''.join(A)

#     return int(A),'R'

def f_D(k):

    return (2*k)%10000,'D'

def f_S(k):

    if k==0:

        return 9999,'S'

    else:

        return k-1,'S'

def f_L(k):

    return (k%1000)*10+(k//1000),'L'

def f_R(k):

    return (k//10)+(k%10)*1000,'R'




def solve_dp(A,B):

    q.append(A)

    while q:

        x = q.popleft()

        # print([f_D(x),f_S(x),f_L(x),f_R(x)])

        for i,j in [f_D(x),f_S(x),f_L(x),f_R(x)]:

            if pre_arr[i]==-1:

                pre_arr[i] = x

                q.append(i)

                temp_arr[i] = j

 

    k = ''    

    while B!=A:

       k += temp_arr[B]

       B = pre_arr[B]

 

    return k[::-1]



for _  in range(int(input())):

    A, B = map(int,input().split())

    q = deque()

    pre_arr = [-1]*(10**4)

    temp_arr = ['']*(10**4)

    print(solve_dp(A,B))

 

 

맨 처음 리스트로 함수를 만들었으나 너무 오래걸려서 다른 분 블로그를 참고하여

modular를 이용하여 함수를 만들었다.

728x90
반응형

댓글