[백준/Python] 1697번 숨바꼭질

2025. 2. 18. 11:41·알고리즘문제풀이

문제

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


문제 풀이(정답)

from collections import deque

n, k = map(int, input().split())
visited = [0] * 100001

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

    while q:
        x = q.popleft()
        if x == k:
            print(visited[x])
            break
        for j in (x-1, x+1, 2*x):
            if 0 <= j <= 100000 and not visited[j]:
                visited[j] = visited[x] + 1
                q.append(j)

bfs()

 

이 문제는 너비우선탐색(BFS)를 이용해서 풀었다.

먼저 시작위치 n과 도착위치 k를 받아준 후, 각 위치까지 도달하는 최소 시간을 visited 변수에 저장해줍니다.

visited변수의 길이는 문제 조건에 N(0 ≤ N ≤ 100,000) 라 정해져있다.

 

그리고 어제 개념을 정리했던 너비우선탐색 함수를 작성했다.

너비 우선 탐색은 큐를 이용해 알고리즘을 구현한다.

 

먼저 시작 위치를 큐에 추가해 준다.

그리고 조건문을 활용해 현재 위치와 도착 위치가 같다면 반복문을 종료해주는 코드를 작성한다.

 

그렇지 않으면 수빈이가 이동할 수 있는 경로를 이용해 코드를 작성 해 주었다.

수빈이가 이동할 수 있는 경로
1. x-1 : 한 칸 뒤로 이동
2. x+1 : 한 칸 앞으로 이동
3. x*2 : 순간 이동

 

범위를 벗어나지 않고 방문하지 않은 경우, 이동시간을 갱신하고 j를 큐에 추가해준다.


런타임에러(IndexError)

코드를 제출했더니 런타임에러가 나서 왜 에러가 나지..? 생각했다.

if 0 <= j <= 100000 and not visited[j]:

 

알고 보니 조건의 순서도 굉장히 중요했다.

나는 not visited[j]의 조건을 먼저 작성하였는데 이렇게 작성을 하면 j가 범위를 벗어난 값을 조회할 때 IndexError 발생이 가능하다.

 

해결 방법
✅ 0 <= j <= 100000를 먼저 체크한 후 visited[j]의 방문 여부를 확인한다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'알고리즘문제풀이' 카테고리의 다른 글

[백준/Python] 1629번 곱셈  (0) 2025.02.20
[백준/Python] 2178번 미로 탐색  (0) 2025.02.19
[백준/Python] 1260번 DFS와 BFS  (0) 2025.02.17
[백준/Python] 2579번 계단 오르기  (0) 2025.02.14
[프로그래머스/Python] 실패율  (0) 2025.02.13
'알고리즘문제풀이' 카테고리의 다른 글
  • [백준/Python] 1629번 곱셈
  • [백준/Python] 2178번 미로 탐색
  • [백준/Python] 1260번 DFS와 BFS
  • [백준/Python] 2579번 계단 오르기
jungyn
jungyn
jungyn 님의 블로그 입니다.
  • jungyn
    jungyn 님의 블로그
    jungyn
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 알고리즘문제풀이 (31)
      • 제로인턴 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    18110
    2563
    프로그래머스
    제로인턴
    11729
    스택 2
    counter
    사전직무교육
    통계헉
    solved.ac
    후기
    DP
    1629
    2161
    너비우선탐색
    2606
    1847
    스택 수열
    시간초과
    SYS
    다이나믹프로그래밍
    BFS
    카드1
    2108
    백준
    교점개수
    28278
    수들의 합 2
    스택
    2차원행렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jungyn
[백준/Python] 1697번 숨바꼭질
상단으로

티스토리툴바