반응형
리뷰
첫 2차원 배열 BFS 문제 도전이었다.. 뭔가 알것같으면서도 애매한 이 느낌
문제 풀이
- BFS를 사용하기 위해 큐를 임포트 해준다.
- 2차원 배열을 받아오고 별개로 방문을 체크해줄 배열을 False로 초기화 해준다.
- 4방향으로 움직일 수 있으므로 방향을 나타내줄 리스트도 초기화 해준다.
- bfs함수를 정의해 준다. 함수 인자로는 2차원 배열 리스트, 현재 x, y좌표 및 거리를 나타낼 튜플
- while루프 실행 전 시작 위치값을 지정해 준다. x, y는 각각 0, 거리는 1
- 움직일 수 있는 위치라면 해당 위치를 방문하여 각 거리를 계산해 준다.
- x, y가 각각 n - 1, m - 1 위치에 도달하게 될 경우 거리를 리턴해준다.
참고 사항
이동 조건을 만족하여 큐에 추가할때 해당 위치를 미리 방문처리 해줘야 한다. 안그랬다가 시간 초과가 났다.
정답 코드
def q2178():
# 백준 2178번 미로 탐색 파이썬
from collections import deque
n, m = map(int, input().split())
lst = [list(map(int, list(input()))) for _ in range(n)]
v = [[False] * m for _ in range(n)]
dist = [(1, 0), (0, 1), (-1, 0), (0, -1)]
def bfs(graph, start):
q = deque([start])
v[0][0] = True
while q:
x, y, d = q.popleft()
if x == n - 1 and y == m - 1:
return d
for dx, dy in dist:
nx, ny = x + dx, y + dy
if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 1 and not v[nx][ny]:
v[nx][ny] = True
q.append((nx, ny, d + 1))
print(bfs(lst, (0, 0, 1)))
q2178()
728x90
반응형
'알고리즘 공부 > 파이썬(Python)' 카테고리의 다른 글
백준 5635번 생일 파이썬 (0) | 2024.07.11 |
---|---|
백준 2667번 단지번호붙이기 파이썬 (0) | 2024.07.10 |
백준 31883번 FA수의 진 파이썬 (0) | 2024.07.09 |
SWEA 1220번 D3 [S/W 문제해결 기본] 5일차 - Magnetic 파이썬 (0) | 2024.07.08 |
백준 13335번 트럭 파이썬 (0) | 2024.07.08 |