[파이썬] 백준 9019 : DSLR (골드4)
9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
문제
풀이
0. 방향성 생각
연산 맞춰서 구현하기
BFS로 탐색 진행하고 가장 먼저 발견했을 때 명령어 출력
1. 입력
from collections import deque
import sys
input = lambda : sys.stdin.readline().rstrip()
cmd = dict(zip((0,1,2,3),('D','S','L','R')))
for _ in range(int(input())):
start,end = map(int,input().split())
visit = [False]*10000
visit[start] = True
q = deque([(start,'')])
while q:
x,command = q.popleft()
if x == end:
print(command)
break
입력받고 루프 생기지 않게 visit 배열 만들어주고 시작
큐 뒷부분에는 명령어를 넣어준다. 처음에는 빈 문자열 '' 시작
큐에서 꺼내서 목표값 end랑 같으면 탈출
2. 연산 정의
for i in range(4):
if i==0:
_,nx = divmod(x*2,10000)
elif i==1:
nx = 9999 if x==0 else x-1
elif i==2:
nx = str(x)
nx = nx.rjust(4,'0')
nx = int(nx[1:]+nx[0])
else:
nx = str(x)
nx = nx.rjust(4,'0')
nx = int(nx[-1]+nx[:3])
if not visit[nx]:
visit[nx] = True
q.append((nx,command+cmd[i]))
D는 2배 이후에 모듈러 연산
S는 -1, 삼항연산자 사용
L,R은 문자열 rjust사용. 앞 자리수는 0으로 채워서 시프트 연산 가능하게 한다.
전체코드
from collections import deque
import sys
input = lambda : sys.stdin.readline().rstrip()
cmd = dict(zip((0,1,2,3),('D','S','L','R')))
for _ in range(int(input())):
start,end = map(int,input().split())
visit = [False]*10000
visit[start] = True
q = deque([(start,'')])
while q:
x,command = q.popleft()
if x == end:
print(command)
break
for i in range(4):
if i==0:
_,nx = divmod(x*2,10000)
elif i==1:
nx = 9999 if x==0 else x-1
elif i==2:
nx = str(x)
nx = nx.rjust(4,'0')
nx = int(nx[1:]+nx[0])
else:
nx = str(x)
nx = nx.rjust(4,'0')
nx = int(nx[-1]+nx[:3])
if not visit[nx]:
visit[nx] = True
q.append((nx,command+cmd[i]))
코멘트
readline인데 readlind라 써서 틀림..
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 1504 : 특정한 최단 경로(골드4) (0) | 2023.08.16 |
---|---|
[파이썬] 백준 2481 : 해밍 경로 (골드2) (0) | 2023.08.12 |
[파이썬] 백준 17244 : 아맞다우산 (골드2) (0) | 2023.08.09 |
[파이썬] 백준 17090 : 미로 탈출하기 (골드3) (0) | 2023.07.31 |
[파이썬] 백준 1525 : 퍼즐 (골드2) (0) | 2023.07.30 |
[파이썬] 프로그래머스 : 단어 변환 (Lv.2) (0) | 2023.07.20 |
[파이썬] 백준 3184, 3187 : 양, 양치기 꿍 (실버1) (0) | 2023.07.13 |
댓글