[BOJ, Python] 2178 - 미로 탐색 ( with BFS )

2022. 11. 14. 00:18·PS (Problem Solving)
728x90
 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

방해물을 피해 목표 지점까지 가는 가장 빠른 방법을 찾는 문제이다. DFS로 구현했을 때 시간 초과, 이어서 BFS로 구현했을 때에도 큐의 앞에서 요소를 하나씩 빼가며 탐색하는 방법이 아니라 큐를 통째로 탐색 후 새롭게 추가된 큐로 대체하는 방법을 사용했더니 역시 시간 초과가 나왔다. 결국 최초로 방문하는 지점에 인덱스를 저장하는 방식으로 구현, AC를 받았다.

# 빠른 입출력, deque 채택
import sys
from collections import deque
input = sys.stdin.readline

def bfs():
    n, m = map(int, input().split())
    
    graph = list()
    
    dx = [0, 0, 1, -1]
    dy = [1, -1, 0, 0]
    
    visit = [[False for _ in range(m)] for _ in range(n)]
    for _ in range(n):
        graph.append(list(map(int, list(input().rstrip()))))

    dq = deque()
    # x, y 좌표와 해당 좌표까지의 최단 거리 저장
    dq.append([0, 0, 1])
    visit[0][0] = True

    while dq:
        x, y, cnt = dq.popleft()
        
        # 목표 지점에 도달하면 return
        if x == n - 1 and y == m - 1:
            return cnt

		# 범위 내에서, 방문하지 않고 방해물이 아닐 때
        for (i, j) in zip(dx, dy):
            if (0 <= x + i < n) and (0 <= y + j < m):
                if not visit[x + i][y + j] and graph[x + i][y + j] == 1:
                    visit[x + i][y + j] = True
                    
                    # 다음 좌표와 거기까지의 최단 거리 저장
                    dq.append([x + i, y + j, cnt + 1])
print(bfs())
728x90
저작자표시 (새창열림)

'PS (Problem Solving)' 카테고리의 다른 글

[BOJ, Python] 25682 - 체스판 다시 칠하기 2 ( with DP )  (1) 2022.11.20
[BOJ, Python] 비트마스크(BitMask) 정리 ( with 11723 - 집합 )  (1) 2022.11.14
[BOJ, Python] 1759 - 암호 만들기 ( with Backtracking )  (0) 2022.10.23
[BOJ, Python] 2580 - 스도쿠 ( with Backtracking )  (0) 2022.10.20
[BOJ, Python] 9663 - N-Queen ( with Backtracking )  (0) 2022.10.12
'PS (Problem Solving)' 카테고리의 다른 글
  • [BOJ, Python] 25682 - 체스판 다시 칠하기 2 ( with DP )
  • [BOJ, Python] 비트마스크(BitMask) 정리 ( with 11723 - 집합 )
  • [BOJ, Python] 1759 - 암호 만들기 ( with Backtracking )
  • [BOJ, Python] 2580 - 스도쿠 ( with Backtracking )
100두산
100두산
출발하게 만드는 힘이 동기라면, 계속 나아가게 만드는 힘은 습관이다.
  • 100두산
    정상에서 보자 ✈️
    100두산
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • Life (6)
        • living (1)
      • Research (6)
      • AI (20)
      • Dev (45)
        • iOS (28)
        • Web (4)
        • flutter (9)
        • etc (4)
      • PS (Problem Solving) (23)
      • Computer Science and Engine.. (21)
        • Data Structures and Algorit.. (13)
        • OOP (Object Oriented Progra.. (8)
      • etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    PS
    BOJ
    ios
    자료구조
    swift
    오블완
    c++
    알고리즘
    SKTelecom
    AI
    TIP
    SKT
    티스토리챌린지
    백준
    Challenger
    D3
    Python
    파이썬
    백트래킹
    xcode
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
100두산
[BOJ, Python] 2178 - 미로 탐색 ( with BFS )
상단으로

티스토리툴바