^^
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)
'알고리즘 algorithms' 카테고리의 다른 글
[백준 2638 Java] 치즈 (0) | 2020.10.27 |
---|---|
[백준 10058 Java] 마법사 상어와 파이어스톰 (0) | 2020.10.27 |
[백준 2468 Java] 안전영역 (0) | 2020.10.20 |
[백준 7612 Python 파이썬] SSSP_다익스트라(Dijkstra) (0) | 2020.10.13 |
[백준 2151 파이썬 Python] 거울설치 (0) | 2020.10.12 |
[백준 2529 Python 파이썬] 두동전 (0) | 2020.09.23 |
[백준 17822 Python 파이썬] 원판 돌리기 (0) | 2020.09.15 |