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

๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

์ˆ˜๋นˆ์ด๋Š” 1์ดˆ์— X-1, X+1, 2*X๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ƒ์˜ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋ผ

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

DFS ๋ฌธ์ œ๋กœ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ˜„์žฌ ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๋ฅผ ํ์— ๋„ฃ๊ณ , ๊ทธ ์œ„์น˜์—์„œ X-1, X+1, 2*X๋กœ ์ด๋™์‹œํ‚จ ํ›„ visted[]์— 1์„ ํ•˜๋‚˜์”ฉ ๋”ํ•ด ์ด๋™์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ์ €์žฅํ•œ๋‹ค.

  1. ๋นˆ ํ์— ํ˜„์žฌ ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๋ฅผ ์ถ”๊ฐ€
  2. ํ๊ฐ€ ๋นŒ ๋•Œ ๊นŒ์ง€, ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ๊บผ๋‚ธ๋‹ค.
    1. ํ•ด๋‹น ๋…ธ๋“œ์˜ x-1, x+1,2x๊ฐ€ ๋ฒ”์œ„ ๋‚ด์ด๊ณ , x-1, x+1, 2x์ด ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋Š” ๋…ธ๋“œ ๊ฒฝ์šฐ,
    2. ํ์— x-1, x+1, 2*x๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ด์ „ ๋…ธ๋“œ์˜ visited์— 1์„ ๋”ํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๊ฐ€ 0<=x<=100000์œผ๋กœ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ธฐ ๋–„๋ฌธ์—, visited[] ๋ฐฐ์—ด๋„ ๊ทธ ํฌ๊ธฐ๋งŒํผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์—ˆ๊ณ , ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ํŒ๋ณ„ํ•  ๋•Œ๋„ x๊ฐ€ ์ด ์œ„์น˜๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ์ฒดํฌํ•ด์คฌ๋‹ค.

https://blog.kakaocdn.net/dn/4oJcz/btsD0E6yeEf/LbhThKIKAgaF0srx3HC3Ck/img.jpg

๐Ÿ’ก์ฝ”๋“œ

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

N, K = map(int, input().split())

visited = [0]*(100001)

def bfs (node, visited, k):
    queue = deque([node])

    while queue:
        x = queue.popleft()
        if x==k:
            print(visited[k])
            return
        for i in (x-1, x+1, x*2):
            if 0<=i<=100000 and visited[i]==0:
                queue.append(i)
                visited[i] = visited[x]+1

bfs(N, visited, K)

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

while ์•ˆ์— for๋ฌธ์ด ๋“ค์–ด๊ฐ€์„œ n^2์ธ๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๊ธด ํ•˜์ง€๋งŒ..

visitted[]๋ฅผ ์ด์šฉํ•ด ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ O(n)์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๐Ÿ’ก ๋Š๋‚€์  or ๊ธฐ์–ตํ•  ์ •๋ณด

deque๋Š” ์ฒ˜์Œ ์จ๋ณด๊ธฐ๋„ ํ•˜๊ณ , list๋กœ๋Š” ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์„๊นŒ? ์‹ถ์—ˆ๋Š”๋ฐ list์˜ pop(0)๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด dp๋ฅผ ์ด์šฉํ• ๊นŒ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ BFS๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ BFS๋ฅผ ํ’€์—ˆ๋‹ค. ํ›จ์”ฌ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์„œ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. dp๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ™๋‹ค