https://www.acmicpc.net/problem/9019
์์ด๋์ด
1. bfs
- ์ต์ํ์ ๋ช ๋ น ์ด์ ์ถ๋ ฅ ํ๋ผ ํ์ผ๋ฏ๋ก bfs๊ฐ ์๋๋ฉด ๋ชป ํ ๊ฑฐ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค.
- ์๊ฐ์ ํ๋ 6์ด๋ก ๋๋ํ๊ฒ ์์ด์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋ค.
2. ์๊ฐ ์ด๊ณผ
- ์์ฆ ๊ณ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค. 6์ด๋ผ์ ๋๋ํ ์ค ์์๋๋ฐ.
- ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- D, S, L, R ๊ฐ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ๊ฐ์ํ๊ฒ ๊ตฌํํด์ผ ํ๋๋ฐ, if๋ฌธ์ด๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด ์๊ฐ์ ํ์ด ๊ฑธ๋ฆฐ ๊ฑฐ ๊ฐ๋ค.
- ์ํ์ ์ผ๋ก ๋จผ์ ์ ๊ทผํ์ผ๋ฉด ์ข์์ ๊ฑฐ ๊ฐ๋ค.
3. DSLR ๋ช ๋ น์ด
- D์ S๋ ๊ธ๋ฐฉ ๋ฐฉ๋ฒ์ ๋ ์ค๋ฅผ ์ ์๋ค. S๋ ์์ ๋๋์ ์ ๋ํด ์๊ณ ์๋ค๋ฉด ์ข๋ค.
- L๊ณผ R์ ์ด ๋ฌธ์ ์์๋ ์๋ฆฟ์๊ฐ ์ ํด์ ธ ์์ผ๋ฏ๋ก ์ฌ์น์ฐ์ฐ์ผ๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
- ์ง์ ์ข ์ด์ ์ ์ด๊ฐ๋ฉฐ ์์์ ๋ง๋๋ ๊ฒ ๋์์ด ๋๋ค.
์ฝ๋ ์ค๋ช
while deq:
num, command = deq.popleft()
if num == B:
print(command)
break
d = num * 2 % 10000
if not visited[d]:
visited[d] = True
deq.append([d, command + 'D'])
s = (num - 1) % 10000
if not visited[s]:
visited[s] = True
deq.append([s, command + 'S'])
l = num // 1000 + (num % 1000)*10
if not visited[l]:
visited[l] = True
deq.append([l, command + 'L'])
r = num // 10 + (num % 10) * 1000
if not visited[r]:
visited[r] = True
deq.append([r, command + 'R'])
bfs์ ๋ํ ๋ด์ฉ์ ๊ฐ๋จํ๋ค.
์ซ์๋ฅผ ๋ณํํ๋ฉด์ ์ด ์ซ์๋ฅผ ๋ฐฉ๋ฌธํ ์ ์ด ์๋์ง ์ฒดํฌํด๊ฐ๋ฉฐ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
์ค์ํ ๊ฑด ๋ช ๋ น์ด ๋ถ๋ถ์ด๋ค.
D๋ S ๊ฐ์ ๋ถ๋ถ์ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง๊ฒ ์ ์ด์ฃผ๋ฉด ๋๋ค.
L์ด๋ R ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ๊ฒฝ์ ์จ์ค์ผ ํ๋ค.
์๋ฅผ ๋ค์ด 123์ด ์๋ค๊ณ ํ๋ฉด. ์ผ์ชฝ์ผ๋ก ํ์ ํ๋ฉด 231์ด ์๋๊ณ 1230์ด ๋๊ณ ,
์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ํ๋ฉด 3012๊ฐ ๋๋ค.
์งง์ ์์์ด๋ฏ๋ก ๊ณต์ฑ ์ด๋ ๋ฉ๋ชจ์ฅ์ ๊ฐ๋จํ๊ฒ ์จ๋ณด๋ ๊ฒ์ด ์ข๋ค. ๋ฐ๋ก ์๊ฐ๋๋ฉด ๋ ์ข๊ณ
๋ณธ์ธ์ deque๋ฅผ ์ฌ์ฉํด rotateํจ์๋ฅผ ์ผ๋๋ฐ ์ด๊ฒ์ด ์๊ฐ ์ด๊ณผ์ ์์ธ์ธ ๊ฒ ๊ฐ๋ค.
์ ์ฒด ์ฝ๋
import sys
from collections import deque
T = int(input())
for _ in range(T):
A, B = map(int,sys.stdin.readline().rstrip().split())
visited = [False for i in range(10001)]
deq = deque()
deq.append([A,''])
visited[A] = True
while deq:
num, command = deq.popleft()
if num == B:
print(command)
break
d = num * 2 % 10000
if not visited[d]:
visited[d] = True
deq.append([d, command + 'D'])
s = (num - 1) % 10000
if not visited[s]:
visited[s] = True
deq.append([s, command + 'S'])
l = num // 1000 + (num % 1000)*10
if not visited[l]:
visited[l] = True
deq.append([l, command + 'L'])
r = num // 10 + (num % 10) * 1000
if not visited[r]:
visited[r] = True
deq.append([r, command + 'R'])
pypy3๋ก ์ ์ถ ์ฌ๋ด์ผ๋ก python3๋ก ๋ง์ถ ์ฌ๋์ 10๋ช ๋ ์๋๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9375 ํจ์ ์ ์ ํด๋น (python ํ์ด์ฌ) (0) | 2022.06.29 |
---|---|
[๋ฐฑ์ค] 1074 Z (python ํ์ด์ฌ) (0) | 2022.06.26 |
[๋ฐฑ์ค] 14500 ํ ํธ๋ก๋ฏธ๋ ธ (python ํ์ด์ฌ) (0) | 2022.06.23 |
[๋ฐฑ์ค] 18111 ๋ง์ธํฌ๋ํํธ (python ํ์ด์ฌ) (4) | 2022.06.23 |
[๋ฐฑ์ค] 1107 ๋ฆฌ๋ชจ์ฝ (python ํ์ด์ฌ) (0) | 2022.06.22 |