영호

[백준] 1697 숨바꼭질 (Python) 본문

Algorithm/BFS

[백준] 1697 숨바꼭질 (Python)

0h0 2022. 6. 28. 16:07

문제 링크

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

 

1697번: 숨바꼭질

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

www.acmicpc.net

나의 풀이

  • 최단거리를 구하기 위해 bfs를 사용했습니다.
  • 최대 입력이 100,000까지라 maps를 100,001 크기로 설정했습니다.
  • bfs알고리즘을 수행하며 x+1, x-1, x*2로 탐색을 했습니다.
    • 인덱스 에러 방지 및 방문한 지점에 대해서 예외처리를 진행합니다.
  • deque.leftpop()에서 목표 지점과 동일한 값이 나오면 bfs()를 종료합니다.

Code

from collections import deque


def bfs():
    q = deque()
    q.append(start)

    while q:
        x = q.popleft()
        if x == end:
            print(maps[x])
            break

        for nx in (x + 1, x - 1, x * 2):
            if 0 <= nx < 100001 and maps[nx] == 0:
                maps[nx] = maps[x] + 1
                q.append(nx)


start, end = map(int, input().split())
maps = [0] * 100001
bfs()

Git

https://github.com/youngh0/Algorithm/blob/master/DFS%2CBFS/boj_1697_BFS.py

'Algorithm > BFS' 카테고리의 다른 글

[백준] 불 5427 (Java)  (0) 2022.10.12
[백준] 토마토 7576 (Python)  (0) 2022.05.26
[백준] 경쟁적 전염 18405 (Python)  (0) 2022.05.24
[백준] 연구소 14502 (Python)  (0) 2022.05.12
Comments