[BOJ][๐ก5][๋ฐฑ์ค#09019] DSLR
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ค ๊ฐ์ ๋ช ๋ น์ด D, S, L, R ์ ์ด์ฉํ๋ ๊ฐ๋จํ ๊ณ์ฐ๊ธฐ๊ฐ ์๋ค. ์ด ๊ณ์ฐ๊ธฐ์๋ ๋ ์ง์คํฐ๊ฐ ํ๋ ์๋๋ฐ, ์ด ๋ ์ง์คํฐ์๋ 0 ์ด์ 10,000 ๋ฏธ๋ง์ ์ญ์ง์๋ฅผ ์ ์ฅํ ์ ์๋ค. ๊ฐ ๋ช ๋ น์ด๋ ์ด ๋ ์ง์คํฐ์ ์ ์ฅ๋ n์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ๋ค. n์ ๋ค ์๋ฆฟ์๋ฅผ d1, d2, d3, d4๋ผ๊ณ ํ์(์ฆ n = ((d1 ร 10 + d2) ร 10 + d3) ร 10 + d4๋ผ๊ณ ํ์)
D: D ๋ n์ ๋ ๋ฐฐ๋ก ๋ฐ๊พผ๋ค. ๊ฒฐ๊ณผ ๊ฐ์ด 9999 ๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ 10000 ์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ทจํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ๊ฐ(2n mod 10000)์ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค. S: S ๋ n์์ 1 ์ ๋บ ๊ฒฐ๊ณผ n-1์ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค. n์ด 0 ์ด๋ผ๋ฉด 9999 ๊ฐ ๋์ ๋ ์ง์คํฐ์ ์ ์ฅ๋๋ค. L: L ์ n์ ๊ฐ ์๋ฆฟ์๋ฅผ ์ผํธ์ผ๋ก ํ์ ์์ผ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค. ์ด ์ฐ์ฐ์ด ๋๋๋ฉด ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๋ค ์๋ฆฟ์๋ ์ผํธ๋ถํฐ d2, d3, d4, d1์ด ๋๋ค. R: R ์ n์ ๊ฐ ์๋ฆฟ์๋ฅผ ์ค๋ฅธํธ์ผ๋ก ํ์ ์์ผ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค. ์ด ์ฐ์ฐ์ด ๋๋๋ฉด ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๋ค ์๋ฆฟ์๋ ์ผํธ๋ถํฐ d4, d1, d2, d3์ด ๋๋ค.
์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ, L ๊ณผ R ๋ช ๋ น์ด๋ ์ญ์ง ์๋ฆฟ์๋ฅผ ๊ฐ์ ํ๊ณ ์ฐ์ฐ์ ์ํํ๋ค. ์๋ฅผ ๋ค์ด์ n = 1234 ๋ผ๋ฉด ์ฌ๊ธฐ์ L ์ ์ ์ฉํ๋ฉด 2341 ์ด ๋๊ณ R ์ ์ ์ฉํ๋ฉด 4123 ์ด ๋๋ค. ์ฌ๋ฌ๋ถ์ด ์์ฑํ ํ๋ก๊ทธ๋จ์ ์ฃผ์ด์ง ์๋ก ๋ค๋ฅธ ๋ ์ ์ A์ B(A โ B)์ ๋ํ์ฌ A๋ฅผ B๋ก ๋ฐ๊พธ๋ ์ต์ํ์ ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ด๋ค. ์๋ฅผ ๋ค์ด์ A = 1234, B = 3412 ๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ์ฉํ๋ฉด A๋ฅผ B๋ก ๋ณํํ ์ ์๋ค. 1234 โL 2341 โL 3412 1234 โR 4123 โR 3412 ๋ฐ๋ผ์ ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋จ์ ์ด ๊ฒฝ์ฐ์ LL ์ด๋ RR ์ ์ถ๋ ฅํด์ผ ํ๋ค. n์ ์๋ฆฟ์๋ก 0 ์ด ํฌํจ๋ ๊ฒฝ์ฐ์ ์ฃผ์ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด์ 1000 ์ L ์ ์ ์ฉํ๋ฉด 0001 ์ด ๋๋ฏ๋ก ๊ฒฐ๊ณผ๋ 1 ์ด ๋๋ค. ๊ทธ๋ฌ๋ R ์ ์ ์ฉํ๋ฉด 0100 ์ด ๋๋ฏ๋ก ๊ฒฐ๊ณผ๋ 100 ์ด ๋๋ค.
์ ๋ ฅ
ํ๋ก๊ทธ๋จ ์ ๋ ฅ์ T ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ๊ตฌ์ฑ๋๋ค. ํ ์คํธ ์ผ์ด์ค ๊ฐ์ T ๋ ์ ๋ ฅ์ ์ฒซ ์ค์ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ก๋ ๋ ๊ฐ์ ์ ์ A์ B(A โ B)๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋๋ฐ A๋ ๋ ์ง์คํฐ์ ์ด๊ธฐ ๊ฐ์ ๋ํ๋ด๊ณ B๋ ์ต์ข ๊ฐ์ ๋ํ๋ธ๋ค. A ์ B๋ ๋ชจ๋ 0 ์ด์ 10,000 ๋ฏธ๋ง์ด๋ค.
์ถ๋ ฅ
A์์ B๋ก ๋ณํํ๊ธฐ ์ํด ํ์ํ ์ต์ํ์ ๋ช ๋ น์ด ๋์ด์ ์ถ๋ ฅํ๋ค. ๊ฐ๋ฅํ ๋ช ๋ น์ด ๋์ด์ด ์ฌ๋ฌ๊ฐ์ง๋ฉด, ์๋ฌด๊ฑฐ๋ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
3
1234 3412
1000 1
1 16
์ถ๋ ฅ
LL
L
DDDD
My Sol
import sys
input = sys.stdin.readline
from collections import deque
def check(num2, txt, char):
global visit, Q
if not visit[num2]:
visit[num2] = txt+char
Q.append((txt+char, num2))
T = int(input())
for _ in range(T):
b, t = map(int, input().split())
visit = ['']*10001
Q = deque()
Q.append(('', b))
while not visit[t]:
txt, num = Q.popleft()
# D์ธ ๊ฒฝ์ฐ
num2 = (num*2)%10000
check(num2, txt, 'D')
# S์ธ ๊ฒฝ์ฐ
num2 = (num-1)%10000
check(num2, txt, 'S')
# L์ธ ๊ฒฝ์ฐ
num2 = (num%1000)*10 + (num//1000)
check(num2, txt, 'L')
# R์ธ ๊ฒฝ์ฐ
num2 = (num//10) + (num%10)*1000
check(num2, txt, 'R')
print(visit[t])
BFS๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค. 10000๊ฐ์ ๋ฌํ๋ ๊ฒฝ์ฐ์ ๋ํด ์ธ๋ฑ์ค๋ก ๊ฐ ์ํฉ์ ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋ฌํ ์ ์๋ ๋ช ๋ น ํ ์คํธ๋ฅผ ์ฑ์๋๊ฐ๋ค. ๋ง์ฝ ์ด๋ฏธ ํด๋น ์ธ๋ฑ์ค์ ๊ฐ์ด ์๋ค๋ฉด ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋ฌํ ์ ์๋ ๋ช ๋ น์ผ๋ก ๋๋ฌํ ๊ฒ์ด๋ฏ๋ก Q์ ์ฑ์์ฃผ์ง ์์๋ ๋๋ค.
๊ฐ ๋ช ๋ น ๊ฒฝ์ฐ์ ๋ฐ๋ฅธ ๊ฐ์ ๋ณํ๋ฅผ ๊ฐ ์ํฉ์์ ๊ณ์ฐํด ํจ์์ ๋ฃ์ด์ค๋ค. ํจ์ ๋ด์์๋ ํด๋น ๊ฐ์ ์ธ๋ฑ์ค๋ก ํ๋ ๋ฐฐ์ด์ ๊ฐ์ด ์ฐจ์๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ ์ฒ์ ๋๋ฌํ๋ ๊ฐ์ด๋ผ๋ฉด ๋ฐฐ์ด๊ณผ deque์ ์ถ๊ฐํ๋ค. ๋ช ๋ น๋ง๋ค ๋ฐ๋ณตํ๋ฏ๋ก ์ปดํฌ๋ํธํํ์๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ