1. 문제 접근 방법
- 이 문제는 문제를 풀다가 막혀서 구글링해서 참고했다
구글링을 통해서, visited 배열을 3차원 배열로 선언해서,
벽을 깬 케이스와 벽을 깨지 않은 케이스를 구분해서 접근할 수 있음을 알게 되었다.
이러한 접근법을 학습하게 되었고, 다른 문제를 푸는데 응용해봐야겠다.
from collections import deque
N, M = map(int, input().split())
board = []
visited = [[[0]*2 for _ in range(M)] for _ in range(N)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(N):
row = input()
tmp = []
for j in range(M):
tmp.append(int(row[j]))
board.append(tmp)
def bfs(x, y, c):
visited[x][y][0] = 1
q = deque()
q.append((x, y, c))
while q:
x, y, c = q.popleft()
if x == N-1 and y == M-1:
return visited[x][y][c]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx and nx<N and 0<=ny and ny<M:
if board[nx][ny] == 1 and c == 0:
visited[nx][ny][1] = visited[x][y][0]+1
q.append((nx, ny, 1))
elif board[nx][ny] == 0 and visited[nx][ny][c] == 0:
visited[nx][ny][c] = visited[x][y][c] + 1
q.append((nx, ny, c))
return -1
ans = bfs(0, 0, 0)
print(ans)'PS' 카테고리의 다른 글
| 등산로 조성 [SWEA 모의 SW 역량 테스트] (1) | 2023.10.08 |
|---|---|
| 소수 경로 [백준 1963] (1) | 2023.10.07 |
| 안전 영역 [백준 2468] (0) | 2023.10.07 |
| 스타트 택시 [삼성 기출] (0) | 2023.10.07 |
| 청소년 상어 [삼성 기출] (1) | 2023.10.06 |