๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 13913 ์ˆจ๋ฐ”๊ผญ์งˆ 4 (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2022. 7. 10. 23:22

https://www.acmicpc.net/problem/13913

 

13913๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 4

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ

www.acmicpc.net

์ˆจ๋ฐ”๊ผญ์งˆ ์‹œ๋ฆฌ์ฆˆ ๋งˆ์ง€๋ง‰ ์ˆจ๋ฐ”๊ผญ์งˆ 1 ๋จผ์ € ํ’€์–ด๋ณด๋Š” ๊ฒŒ ์ข‹๋‹ค.


์•„์ด๋””์–ด

1. bfs

  • ํ์— x +1, x - 1, x * 2๋ฅผ ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • ํ์— ์œ„์น˜์™€ ์‹œ๊ฐ„ ๊ทธ๋ฆฌ๊ณ  ์ง€๋‚˜์˜จ ๊ธธ๋„ ๊ฐ™์ด ๋„ฃ์–ด์ค€๋‹ค.
  • ๋„์ฐฉํ•˜๋ฉด ๋„์ฐฉ ์‹œ๊ฐ„๊ณผ ๊ฒฝ๋กœ๋ฅผ ๋ฆฌํ„ด ํ›„ ์ถœ๋ ฅ.

์ „์ฒด ์ฝ”๋“œ

from collections import deque
N, K = map(int,input().split())
visited = [False] * (200001)

def bfs(n):

    deq = deque()
    deq.append([n, 0,[n]])
    visited[n] = True

    if n > K:
        return n - K, [int(x) for x in range(n,K - 1,-1)]


    while deq:
        x, count, road = deq.popleft()

        if x == K:
            return count, road

        arr = [x - 1, x + 1, x * 2]
        for a in arr:
            if 0 <= a <= 100000 and visited[a] == False:
                visited[a] = True
                r = road + [a]
                deq.append([a, count + 1, r])

ans_count, ans_road = bfs(N)

print(ans_count)
for path in ans_road:
    print(path,end=' ')

์ฝ”๋“œ ์„ค๋ช…

 

def bfs(n):

    deq = deque()
    deq.append([n, 0,[n]])
    visited[n] = True

    if n > K:
        return n - K, [int(x) for x in range(n,K - 1,-1)]


    while deq:
        x, count, road = deq.popleft()

        if x == K:
            return count, road

        arr = [x - 1, x + 1, x * 2]
        for a in arr:
            if 0 <= a <= 100000 and visited[a] == False:
                visited[a] = True
                r = road + [a]
                deq.append([a, count + 1, r])

๊ธฐ์กด ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•  ๊ฑด ๊ฒฝ๋กœ๋งŒ ๊ฐ™์ด ์ €์žฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทผ๋ฐ ๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 100000 0 ๊ฐ™์€ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋œฌ๋‹ค.

 

์ด๋Ÿด ๋•Œ๋Š” ์ด๋ฏธ N๋ณด๋‹ค K๊ฐ€ ํฐ ๊ฒฝ์šฐ ๋”ฐ๋กœ ์ƒ๊ฐํ•ด์ค€๋‹ค.

๋„์ฐฉํ•˜๋ ค๋ฉด ๋’ค๋กœ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•(x - 1)๋ฟ์ด๋ฏ€๋กœ ์‹œ๊ฐ„์€ N - K

๊ฒฝ๋กœ๋Š” N๋ถ€ํ„ฐ K๊นŒ์ง€ 1์”ฉ ๊ฐ์†Œํ•˜๋ฉด ๋œ๋‹ค.