[BOJ] 2178. 미로 탐색

2025. 7. 22. 18:00·BOJ

📌 문제 제목

문제 링크: BOJ 2178

🗒️ 문제 설명

NxM 크기의 배열로 표현되는 미로가 있다.

미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다.

(1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램.

시간 제한: 1초

메모리 제한: 192MB

2 <= N, M <= 100


💡 문제 해결 아이디어

  • NM이 10,000 이기 때문에 O(NM)의 시간복잡도를 가지는 알고리즘 사용.
  • BFS를 사용해서 각 칸과 시작점 사이의 거리를 구할 수 있다.

⌛️ 시간 복잡도

  • O(NM)

✅ 최종 코드

import sys
from collections import deque
input = sys.stdin.readline

N, M = map(int, input().split())
graph = [list(map(int, input().strip())) for _ in range(N)]

dist = [[-1] * M for _ in range(N)]
direction = [(-1, 0), (1, 0), (0, -1), (0, 1)]

queue = deque([(0, 0)])
while queue:
    xp, yp = queue.popleft()
    dist[0][0] = 1
    for dx, dy in direction:
        nx, ny = xp + dx, yp + dy
        if not (0 <= nx < N and 0 <= ny < M):
            continue
        if dist[nx][ny] == -1 and graph[nx][ny] == 1:
            queue.append((nx, ny))
            dist[nx][ny] = dist[xp][yp] + 1
print(dist[N-1][M-1])

 

'BOJ' 카테고리의 다른 글

[BOJ] 4179. 불!  (0) 2025.07.22
[BOJ] 7576. 토마토  (0) 2025.07.22
[BOJ] 1926. 그림  (0) 2025.07.22
[BOJ] 2504. 괄호의 값  (0) 2025.07.21
[BOJ] 10799. 쇠막대기  (0) 2025.07.21
'BOJ' 카테고리의 다른 글
  • [BOJ] 4179. 불!
  • [BOJ] 7576. 토마토
  • [BOJ] 1926. 그림
  • [BOJ] 2504. 괄호의 값
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • BOJ (28)
      • 알고리즘 (4)
      • TIL (0)
      • Project (1) N
  • 인기 글

  • 태그

    DFS
    Project
    스택
    dp
    backtracking
    PYTHON
    stack
    BOJ
    Algorithm
    PriorityQueue
    BFS
    Next.js
    Zelda
    투 포인터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
[BOJ] 2178. 미로 탐색
상단으로

티스토리툴바