https://www.acmicpc.net/problem/9019
9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
풀이
문제를 보았을때 알수있는 힌트
먼저 pypy3로 푸는 것이 좋다. 실제 확인해보니 python으로 푼사람이 8명도 안된다..;;
문제를 보고 반복 시키기에는 너무 많은 양을 반복해야할듯해서 BFS를 통해 풀면 될듯하다는생각을 가졌다.
dfs는 방문을 했는지만 체크하면 확실히 시간을 줄일 수 있다.
이를 유의하여 문제를 풀면 된다.
import sys
from collections import deque
input = sys.stdin.readline
t= int(input())
for _ in range(t):
a,b = map(int,input().split())
visited=[False for _ in range(10001)]
result=deque([[a,""]])
while result:
v= result.popleft()
temp=(v[0]*2)%10000
if temp==b:
print(v[1]+"D")
break
elif visited[temp]==False:
visited[temp]=True
result.append([temp,v[1]+"D"])
temp = v[0]-1
if temp==-1:
temp=9999
if temp==b:
print(v[1]+"S")
break
elif visited[temp]==False:
visited[temp]=True
result.append([temp,v[1]+"S"])
temp=int(v[0]%1000*10+v[0]/1000)
if temp==b:
print(v[1]+"L")
break
elif visited[temp]==False:
visited[temp]=True
result.append([temp,v[1]+"L"])
temp=int(v[0]%10*1000+v[0]//10)
if temp==b:
print(v[1]+"R")
break
elif visited[temp]==False:
visited[temp]=True
result.append([temp,v[1]+"R"])
https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon9019.py
GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리
코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.
github.com
'Coding Test > baekjoon' 카테고리의 다른 글
[백준 11000] 강의실 배정- python (solved.ac - 골드 5) (0) | 2022.04.21 |
---|---|
[백준 5639] 이진 검색 트리- python (solved.ac - 골드 5) (0) | 2022.04.20 |
[백준 12904] A와 B - python (solved.ac - 골드 5) (0) | 2022.04.18 |
[백준 2841] 외계인의 기타 연주- python (solved.ac - 실버 1) (0) | 2022.04.17 |
[백준 2110] 공유기 설치 - python (solved.ac - 골드 5) (0) | 2022.04.17 |