๐ ๋ฌธ์ ์ฌ์ดํธ : https://www.acmicpc.net/problem/9019
์ด ๋ฌธ์ ๋ D, S, L, R ์ด๋ผ๋ ๋ค ๊ฐ์ง ์ฐ์ฐ์ด ์๋๋ฐ, ์ ๋ ฅ๋ฐ์ ๋ ์ซ์ a, b์ ๋ํ์ฌ ์ฐ์ฐ๋ค์ ์ ์กฐํฉํด์ ์ต์ํ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ a๋ฅผ b๋ก ๋ง๋ค๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
์ฐ์ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ๋ฒ์ bfs๋ฅผ ์ฌ์ฉํ์๋ค.
1) ์ฒ์์ a๋ผ๋ ์ซ์๋ฅผ queue์ ๋ฃ์ด๋๊ณ , ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ (visited = True)
2) ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ queue๊ฐ ๋น์ด์์ ๋๊น์ง ๋ฐ๋ณตํ์ฌ bfs๋ฅผ ์งํ
3) queue์์ ๊ฐ์ popํ์ฌ ๊ทธ ์ซ์์ ๋ํ D, S, L, R ์ฐ์ฐ์ ์ํํ๊ณ ๊ฐ ๊ฒฐ๊ณผ์ ๋ํด visited ์ฒ๋ฆฌ๋ฅผ ํ ํ์, q์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
4) 3)์์ queue pop์ ํ ๋๋ง๋ค b์ ๊ฐ์ ์ซ์์ธ์ง ๋น๊ต ํ ๊ฐ์ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ์ถ๋ ฅ ํ break
์ฐ์ฐ์ L๊ณผ R์ ์๋ฆฟ์ ์ด๋ ์ฐ์ฐ์ธ๋ฐ, 2์ง์ ๋นํธ์ฐ์ฐ์๋ฅผ ์ญ์ง์์ ํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
๋ํ ๋ค ์๋ฆฌ ์ซ์๊ฐ ์๋๋๋ผ๋ ๋น ์๋ฆฌ ์๋ 0์ผ๋ก ์ฑ์์ ธ์๋ค๊ณ ์๊ฐํ์ฌ์ผ ํ๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์คํดํ๋ฉด ์๋๋ ๋ถ๋ถ ์์
L :
123 -> 312 x
123 -> 3012 o
R :
123 -> 231 x
123 -> 1230 o
from collections import deque
def getDSLR(x):
dslr = []
# DSLR
dslr.append((x * 2) % 10000)
dslr.append(x - 1 if x != 0 else 9999)
dslr.append((x * 10) % 10000 + (x * 10) // 10000)
dslr.append((x % 10) * 10000 // 10 + (x // 10))
return dslr
def main():
t = int(input())
# DSLR ๋ฌธ์
dslr_str = ["D", "S", "L", "R"]
for _ in range(t):
a, b = map(int, input().split())
# bfs ์ฌ์ฉ : visited, deque ์ค์
visited = [False] * (10001)
q = deque()
visited[a] = True
q.append((a, []))
while q:
a, results = q.popleft()
if a == b:
print(''.join(results))
break
dslr = getDSLR(a)
for i in range(len(dslr)):
if not visited[dslr[i]]:
visited[dslr[i]] = True
q.append((dslr[i], results + [dslr_str[i]]))
if __name__ == "__main__":
main()