๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

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

by chjcoder 2023. 6. 20.

๐ŸŽˆ๋ฌธ์ œ

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

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. 1์ฐจ์›์—์„œ์˜ bfs

2. 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์—์„œ ์ƒํ•˜์ขŒ์šฐ์˜ ์›€์ง์ž„์„ ๋ณด์—ฌ์ค€ ๊ธฐ์กด์˜ ๋ฌธ์ œ๋“ค๊ณผ ๋‹ฌ๋ฆฌ ์ด ๋ฌธ์ œ์—์„œ๋Š” 1์ฐจ์›์—์„œ [-1,+1,*2]๋งŒํผ์˜ x์ขŒํ‘œ ์›€์ง์ž„์„ ๋ณด์—ฌ์ค€๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

๐Ÿ’ป์ฝ”๋“œ

from collections import deque

def bfs(x):
    deq = deque()
    deq.append(x)

    while deq:
        x = deq.popleft()

        if x == k:
            print(graph[x])
            break

        for i in [x-1,x+1,x*2]:
            nx = i
            if nx < 0 or nx > (100001)-1:
                continue
            if graph[nx] == 0:
                graph[nx] = graph[x] + 1
                deq.append(nx)
                # print('graph:',graph)
                # print('deq:',deq)
    return

n,k = map(int,input().split())  #  n:์ˆ˜๋นˆ ์œ„์น˜, k:๋™์ƒ ์œ„์น˜
#graph
graph = [0 for i in range(100001)]

bfs(n)

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

 ๋ฌธ์ œ์˜ ์˜ˆ์‹œ๋ฅผ bfs๋กœ ํ’€์–ด๋‚ด๋Š” ๊ณผ์ •์„ ์‚ด์ง ๋ณด์—ฌ์ฃผ๋ฉด

1. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...] 5๋ฒˆ์งธ idx๋ฅผ bfs์— ๋„ฃ๊ณ  ๋Œ๋ฆฌ๋ฉด

2. [0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,...] ์ด๋ ‡๊ฒŒ 5๋ฒˆ์งธ idx(index)๋ฅผ ๊ธฐ์ค€์œผ๋กœ 4๋ฒˆ์งธ, 6๋ฒˆ์งธ, 10๋ฒˆ์งธ idx๊ฐ€ 1๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ 4๋ฒˆ์งธ 6๋ฒˆ์งธ 10๋ฒˆ์งธ idx๋Š” ํ์— ๋“ค์–ด๊ฐ€ ๋‹ค์Œ์— -1,1,2๋ฐฐ ๊ฐ๊ฐ ํ•œ๋ฒˆ์”ฉ ๋ชจ๋‘ ์ด๋™ํ•œ๋‹ค.

3. [0,0,0,2,1,2,1,2,2,2,1,2,2,0,0,0,0,0,0,0,2,...]

4. [0,0,3,2,1,2,1,2,2,2,1,2,2,3,3,0,3,0,3,3,2,...]

5. [0,4,3,2,1,2,1,2,2,2,1,2,2,3,3,4,3,4,3,3,2,...] ์ด์™€๊ฐ™์ด ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ๊ฒฐ๊ตญ 17๋ฒˆ์งธ idx์— ๊ฐ€์žฅ ์ตœ์ ์˜ ํšŸ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

 

bfs๋ฅผ ๋– ์˜ฌ๋ ธ๋‹ค๋ฉด, ๋‹ค์Œ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณผ ๋งŒํ•œ ๊ฒƒ์ด 'graph์˜ ๋ฒ”์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€'์ด๋‹ค. [๋’ค๋กœ ํ•œ ์นธ, ์•ž์œผ๋กœ ํ•œ ์นธ, ์•ž์œผ๋กœ ๋‘ ๋ฐฐ] ์ด๋ ‡๊ฒŒ ์„ธ ์›€์ง์ž„๋งŒ์„ ๋ณด์—ฌ์ค€๋‹ค๋ฉด ์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋Š” ์‰ฌ์›Œ๋„ ๋’ค๋กœ ๊ฐ€๊ธฐ๋Š” ์–ด๋ ค์šฐ๋ฏ€๋กœ ๋™์ƒ์„ ์ง€๋‚˜์นœ ๋‹ค์Œ -1์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•ด์„œ ์˜ฌ ๋ฐ”์—” ์ตœ๋Œ€ํ•œ ๋ฏธ๋ฆฌ -1์„ ์ด์šฉํ•ด 2๋ฐฐ ๋งŒํผ์”ฉ ์•ž์œผ๋กœ ์˜ค๊ฒ ๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ƒ์˜ ์ตœ๋Œ€ ๋ฒ”์œ„ ๋งŒํผ 100001์„ ์„ค์ •ํ•ด์คฌ๋‹ค.

 

if x==k: ๋ฅผ ์ด์šฉํ•ด์„œ ํƒˆ์ถœํ•˜๋Š” ๋ฌธ์žฅ์ด ์ € ์œ„์น˜์— ์žˆ๋Š” ์ด์œ ๋Š” ๊ฐ™์€ ๊ฐ’์„ ๋„ฃ์—ˆ์„ ๋•Œ 0์˜ ๊ฐ’์„ ๋ฑ‰์–ด๋‚ด๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

ex) 5 5 ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.