[Baekjoon] - 9019. DSLR (G4)

์˜ค๋™ํ›ˆยท2022๋…„ 2์›” 15์ผ
0

Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
45/58
post-thumbnail

1. Problem ๐Ÿ“ƒ

๐Ÿ“š ์ถœ์ฒ˜ - 9019 - DSLR

๋ฌธ์ œ ์„ค๋ช…
๋„ค ๊ฐœ์˜ ๋ช…๋ น์–ด D, S, L, R ์„ ์ด์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ์žˆ๋‹ค. ์ด ๊ณ„์‚ฐ๊ธฐ์—๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ, ์ด ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” 0 ์ด์ƒ 10,000 ๋ฏธ๋งŒ์˜ ์‹ญ์ง„์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ n์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜ํ•œ๋‹ค. n์˜ ๋„ค ์ž๋ฆฟ์ˆ˜๋ฅผ d1, d2, d3, d4๋ผ๊ณ  ํ•˜์ž(์ฆ‰ n = ((d1 ร— 10 + d2) ร— 10 + d3) ร— 10 + d4๋ผ๊ณ  ํ•˜์ž)

  1. D: D ๋Š” n์„ ๋‘ ๋ฐฐ๋กœ ๋ฐ”๊พผ๋‹ค. ๊ฒฐ๊ณผ ๊ฐ’์ด 9999 ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” 10000 ์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ทจํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’(2n mod 10000)์„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค.
  2. S: S ๋Š” n์—์„œ 1 ์„ ๋บ€ ๊ฒฐ๊ณผ n-1์„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค. n์ด 0 ์ด๋ผ๋ฉด 9999 ๊ฐ€ ๋Œ€์‹  ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ๋‹ค.
  3. L: L ์€ n์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์™ผํŽธ์œผ๋กœ ํšŒ์ „์‹œ์ผœ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ์ด ๋๋‚˜๋ฉด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๋„ค ์ž๋ฆฟ์ˆ˜๋Š” ์™ผํŽธ๋ถ€ํ„ฐ d2, d3, d4, d1์ด ๋œ๋‹ค.
  4. 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

2. Logic ๐Ÿ‘จโ€๐Ÿซ

๋‹ค์Œ ๋กœ์ง์€ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ์ˆœํšŒํ•˜๋‹ค ๊ฐ’์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ถœ๋ ฅํ•˜๋Š” ๋กœ์ง์ž…๋‹ˆ๋‹ค.

Logic
BFS ์ค€๋น„๋ฌผ: deque, visited(๋ฐฉ๋ฌธ ํ™•์ธ)
1. ์ฒ˜์Œ ์ฃผ์–ด์ง„ ์ˆ˜์™€ ๋นˆ ๋ฌธ์ž์—ด์„ queue์— ๋‹ด์•„์ฃผ๋ฉด์„œ ์‹œ์ž‘ํ•œ๋‹ค.
2. ๊ฐ๊ฐ D, S, L, R์˜ ๊ฒฝ์šฐ๋Œ€๋กœ ์กฐ๊ฑด ์„ค์ •
- D ๐Ÿ‘‰ * 2ํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  10000์œผ๋กœ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•ด์คŒ (9999 ๋ณด๋‹ค ํฌ๋ฉด 10000์œผ๋กœ ๋‚˜๋จธ์ง€ ย ย ย ย ย ย ย ย ย ย ย ๊ตฌํ•˜๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ)
- S ๐Ÿ‘‰ -1ํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  10000์œผ๋กœ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•ด์คŒ (n์ด 0์ด๋ผ๋ฉด 9999๊ฐ€ ์ €์žฅ๋˜์•ผ ๋œ๋‹ค๋Š” ย ย ย ย ย ย ย ย ย ย ย ์กฐ๊ฑด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ => -1 % 10000๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด 9999 ์ถœ๋ ฅ)
- L ๐Ÿ‘‰ ๋งจ ์™ผ์ชฝ์˜ ์ˆ˜๋ฅผ ๋งจ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ž‘์„ฑ
ย ย ย ย ย ย ย ย ย ย ย (num % 1000) * 10 + num//1000)
- R ๐Ÿ‘‰ ๋งจ ์˜ค๋ฅธ์ชฝ์˜ ์ˆ˜๋ฅผ ๋งจ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ž‘์„ฑ
ย ย ย ย ย ย ย ย ย ย ย ((num % 10) * 1000 + num//10)
3. ๊ฐ๊ฐ DSLR์˜ ์กฐ๊ฑด๋Œ€๋กœ ํ–ˆ์„ ๋•Œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋”๋ผ๋ฉด, ๋ฐฉ๋ฌธ ์ฒดํ‚น๊ณผ ๋™์‹œ์— queue์—
ย ย ย ์ˆซ์ž์™€ ๊ฐ๊ฐ ํ•ด๋‹น๋˜๋Š” ๋ฌธ์ž ์‚ฝ์ž…
4. 2, 3์„ ๋ฐ˜๋ณตํ•ด์คŒ๊ณผ ๋™์‹œ์— ์›ํ•˜๋Š” ์ˆซ์ž์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด ๊ทธ๋•Œ์˜ ๋ฌธ์ž์—ด ์ถœ๋ ฅ

3. Code ๐Ÿ’ป

1. ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ ๐Ÿ˜

from collections import deque
import sys
input = sys.stdin.readline

def bfs(before, after):
    queue = deque()
    queue.append((before, ""))
    visited = [0] * 10000
    visited[before] = 1

    while queue:
        num, word = queue.popleft()
        if num == after:
            return word
        
        # D
        if not visited[(num * 2) % 10000]:
            queue.append(((num*2)%10000, word + "D"))
            visited[(num * 2) % 10000] = 1

        # S
        if not visited[(num - 1) % 10000]:
            queue.append(((num-1)%10000, word + "S"))
            visited[(num - 1) % 10000] = 1
        
        # L
        if not visited[((num % 1000) * 10 + num//1000)]:
            queue.append((((num % 1000) * 10 + num//1000), word + "L"))
            visited[((num % 1000) * 10 + num//1000)] = 1

        # R
        if not visited[((num % 10) * 1000 + num//10)]:
            queue.append((((num % 10) * 1000) + num // 10, word + "R"))
            visited[((num % 10) * 1000) + num // 10] = 1

T = int(input())

for i in range(T):
    before, after = map(int, input().split())
    print(bfs(before, after))
profile
์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค๐Ÿฅ

0๊ฐœ์˜ ๋Œ“๊ธ€