๐ฑ ๋ฌธ์
https://www.acmicpc.net/problem/1697
๐ก ์ค๋ช
ํด๋น ๋ฌธ์ ๋ BFS(๋๋น ์ฐ์ ํ์) ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ ๋๋ค.
๋ง์ฝ, BFS๊ฐ ์๋ DFS(๊น์ด ์ฐ์ ํ์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํด๋น ๋ฌธ์ ์์ BFS์ DFS ์ฌ์ฉ์ ์ฐจ์ด๋ฅผ ์๊ฐํด๋ณธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
DFS๋ ์ฐพ๊ณ ์ ํ๋ ๋ฐฉํฅ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ์ฐพ์ ์ ์์ผ๋, ๋ฐ๋๋ก ์ฐพ๊ณ ์ ํ๋ ๋ฐฉํฅ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ๋ง์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํด๋น ๋ฌธ์ ์์ ๋์์ ๋งจ ์(1)์ ์๋๋ฐ, ๋์ ๋ณด๋ค ํ ์นธ ์์ ์์นํ ํ(2)์ด ์ฐ์ ํ ์นธ์ฉ ์์ผ๋ก ์ด๋ํ๋ฉฐ ํ์ํ๋๋ก ์ค๊ณํ๋ค๋ฉด ๋ฒ์ ๋ด์์ ๋ฐ๋ณต์ ์ผ๋ก ํ ์นธ์ฉ๋ง ๋ค๋ก ์ด๋ํ์ฌ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
ex. ๋์ ์์น : 1 / ํ ์์น : 2
1[๋์] / 2[ํ ํ์] -> (2, 3 ,4 , 5, ... , 99999, 100000)
์ฆ, ํด๊ฐ ์๋ ๊ฒฝ๋ก์์ ๊น์ด ๋น ์ง ์ํ์ด ์กด์ฌํฉ๋๋ค.
๋ฐ๋ฉด, BFS๋ ํ์ฌ ์์น์์ ๊ทธ๋ฌผ๋ง์ฒ๋ผ -1, +1, x2 ๋งํผ ํผ์ ธ๋๊ฐ๋ฉฐ ์ต์ ์ ํด๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ ์์ ์ ์ธ ์๊ฐ ๋ด์ ์ ๋ต์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ต์ ์ํด๋ฅผ ๋ณด์ฅ๋ฐ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์๋ BFS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค.
โ๏ธ ์์ค์ฝ๋
#-*- coding:utf-8 -*-
from collections import deque
import sys
input = sys.stdin.readline
MIS = lambda: map(int, input().rstrip().split())
start, dest = MIS()
res = sys.maxsize
def f(start, dest):
visited = [False] * 100001
q = deque([(start, 0)])
result = sys.maxsize
while q:
now, count = q.popleft()
if not (0 <= now <= 100000): continue
if visited[now]: continue
visited[now] = True
if now == dest:
result = min(result, count)
q.append((now+1, count+1))
q.append((now-1, count+1))
q.append((now*2, count+1))
return result
print(f(start, dest))
github : https://github.com/tmdgh1592
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค - Python] 2579๋ฒ : ๊ณ๋จ ์ค๋ฅด๊ธฐ (1) | 2022.09.28 |
---|---|
[๋ฐฑ์ค - Python] 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (1) | 2022.09.20 |
[๋ฐฑ์ค - Python] 2671๋ฒ : ์ ์ํจ์๋ณ (0) | 2022.09.14 |
[๋ฐฑ์ค/ํ์ด์ฌ] 1004๋ฒ ๋ฌธ์ '์ด๋ฆฐ ์์' (14) | 2021.06.11 |
[๋ฐฑ์ค/ํ์ด์ฌ] 1003๋ฒ ๋ฌธ์ 'ํผ๋ณด๋์น ํจ์' (16) | 2021.06.10 |