Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

백준 1967번(숨바꼭질) 파이썬 본문

Algorithm

백준 1967번(숨바꼭질) 파이썬

동그라미_ssu 2023. 1. 16. 18:15

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

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

지금까지 풀었던  bfs 문제와 유형이 달랐다.

지금까지는 좌표를 상하좌우로 이동하여 푸는 문제들이였는데 이 문제는

상하좌우가 아닌 -1,+1,*2 이 3가지의 방향으로 이동한다. 좌표도 필요가 없는 문제였다.

문제를 보고 그래프가 머리에 그려지긴 했지만 지금까지 풀던 문제와 달라 조금 당황했다.

그리고 시간초과가 나는 이유도 몰랐다가 다른 분들의 풀이를 참고해 이유를 알게되었다.

 

import sys
from collections import deque

input = sys.stdin.readline
max = 100001
N,K = map(int,input().split())
count = [0]*max #시간초과가 나지 않게 크기를 설정해준다.

def bfs(a,b):
    q=deque()
    q.append(a)
    
    while q:
        x = q.popleft()
        if x == b:
            print(count[x])
            break
        for dx in (x-1,x+1,x*2): # 방향이 3개이므로 for문을 이렇게 선언해준다.
            if (0<=dx<max and count[dx] == 0): # 리스트보다 크지않고 방문 안했을때!!
                q.append(dx)
                count[dx] = count[x]+1 # 반복될때마다 1씩 더해준다.

bfs(N,K)

아직 더... 해야 한다...