본문 바로가기
알고리즘 algorithms

[백준 9019 Python] DSLR

by 괴로운데이빗 2020. 10. 20.

^^

python3 : 시간초과

pypy3 : 통과

이제부터는 자바로 코딩하기로 다짐했다^^

from collections import deque
import math

def bfs(que) :
    
    
    global end_no
    global finded_dap

    
    while( len(que)>0 ) :
        
        now_no = que.popleft()
        if finded_dap :
            break
        if( now_no==end_no ) :
            print(visit_no[now_no])
            finded_dap = True
            break
        else :
            for i in range(4) :
                if(i==0) : # D
                    temp_no = now_no*2
                    temp_no = temp_no % 10000
                    if( (visit_no[temp_no]!='')|(temp_no==now_no) ):
                        continue
                    visit_no[temp_no] = visit_no[now_no]+'D'
                    que.append(temp_no)
                elif(i==1) : # S
                    if(now_no==0) :
                        temp_no = 9999
                    else :
                        temp_no = now_no-1
                    if( (visit_no[temp_no]!='')|(temp_no==now_no) ):
                        continue
                    visit_no[temp_no] = visit_no[now_no]+'S'
                    que.append(temp_no)
                elif(i==2) : # L
                    temp_mod = now_no%(10**3)
                    temp_no = int(now_no/(10**3))
                    
                    temp_no = (temp_mod*10)+temp_no
                    if( (visit_no[temp_no]!='')|(temp_no==now_no) ):
                        continue
                    
                    visit_no[temp_no] = visit_no[now_no]+'L'
                    que.append(temp_no)
                else : # R
                    temp_mod = now_no%10
                    temp_no = int(now_no/10)
                    temp_no = (temp_mod*10**3)+temp_no
                    if( (visit_no[temp_no]!='')|(temp_no==now_no) ):
                        continue
                    
                    visit_no[temp_no] = visit_no[now_no]+'R'
                    que.append(temp_no)
                    
        

   
N = int(input()) # N : 탐색해야할 문제의 수
    
for i in range(N) :
    
    visit_no = ['']*10000 # 0~9999 숫자만큼의 배열을 만들어, 각 숫자에 방문 시에 방문까지 움직인 경로(D,S,L,R)을 저장한다. 방문경로를 que로 넘겨줄 경우, 경로(String)가 매번 복사되므로 시간초과가 발생한다.
    start_no, end_no = map(int, input().split()) # start_no : 시작숫자, end_no : 찾을숫자
    
    finded_dap = False
    que = deque()
    que.append(start_no)
    bfs(que)