Baekjoon 9019๋ฒˆ DSLR

๋…ธ๊ทธ๋ฆฌยท2022๋…„ 5์›” 14์ผ
0

๐Ÿ“‘ Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
9/15
post-thumbnail

๐Ÿ’ญ ๋ฌธ์ œ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?

๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•

  • 'A์—์„œ B๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ช…๋ น์–ด' => BFS๊ฐ€ ๋– ์˜ฌ๋ž๋‹ค.
  • ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ๊ฑฐ์ณ B์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•  ์ง€ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๊ฒฐ๊ณผ,
  • visited์— ์ง€๋‚˜์˜จ ๊ฒฝ๋กœ๋ฅผ ๋‹ด์•„์„œ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ํ•ด๋ณด์ž๋Š” ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ๋‹ค!
  • DSLRํ•จ์ˆ˜ : ๋ช…๋ น์–ด D์™€ S์˜ ๊ฒฝ์šฐ n์˜ ๋ฒ”์œ„์—์„œ ๋ฒ—์–ด๋‚  ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ, ์ตœ๋Œ€ํ•œ ๊ทธ๋Ÿฐ ์กฐ๊ฑด์„ ๋”ฐ๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ๋– ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์—ˆ๋‹ค.
def DSLR(num): 
    word = f'{num:04d}' # word: L, R ์ž‘์—…์„ ์œ„ํ•œ num์„ 4์ž๋ฆฌ string์œผ๋กœ ๋ณ€ํ™˜
    result = {
        'D': (num * 2) % 10000,
        'S': num + 9999 - bool(num) * 10000,
        'L': int(word[1:] + word[0]),
        'R': int(word[-1] + word[:3])
    }
    return result


def bfs(start, end):
    q = ['' for _ in range(10000)]
    visited = ['' for _ in range(10000)]
    front = -1
    rear = 0
    q[rear] = start
    visited[start] = 'start'
    cnt = 0

    while front != rear:
        front += 1
        num = q[front]

        for command, new in DSLR(num).items():

            if new == end: # end(target)์— ๋„๋‹ฌํ•˜๋ฉด 
                return visited[num][5:] + command # ์‹œ์ž‘์  ๋‹จ์–ด 'start'์ œ์™ธํ•˜๊ณ  ์ถœ๋ ฅ

            if not visited[new]:
                cnt += 1
                rear += 1
                q[rear] = new
                visited[new] = visited[num] + command


T = int(input())
for _ in range(T):
    initial, target = map(int, input().split()) # initial: A, target: B
    print(bfs(initial, target))

์ฐธ๊ณ 

  • ์ฒ˜์Œ์—๋Š” while๋ฌธ์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์„ q์—์„œ ๊ฐ’์„ ๋ฝ‘๊ณ ๋‚œ ํ›„๋กœ ํ–ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ....
  • ์ถœ๋ ฅ์„ ํ•ด๋ณด๋‹ˆ end๊นŒ์ง€ ๋‹จ๊ณ„๋ฅผ ๋งŽ์ด ๊ฑฐ์น  ๊ฒฝ์šฐ, end์— ๋„๋‹ฌํ•˜๋”๋ผ๋„ ์ข…๋ฃŒ์กฐ๊ฑด(q์—์„œ popํ•  ๋•Œ)์„ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์ด ์ง„ํ–‰๋œ๋‹ค๋Š” ์ ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.
  • ๊ธฐ์กด์˜ ์ฝ”๋“œ ํ˜•ํƒœ๋กœ๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ์ž‘์—…์˜ ๋ชจ๋‘ ๋๋‚˜๊ณ  ๋‚˜์„œ์•ผ ํŒ๋ณ„์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ๋ฐ”๋กœ for๋ฌธ ์•ˆ์œผ๋กœ ์ข…๋ฃŒ์กฐ๊ฑด์„ ์˜ฎ๊ธฐ๋‹ˆ๊นŒ ํ†ต๊ณผ๋๋‹ค...
profile
์ž๊ธฐ์†Œ๊ฐœ๊ฐ€ ์‹ซ์–ด์š”

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