1from collections import deque
2visited = []
3vx = [0, 0, -1, 1]
4vy = [-1, 1, 0, 0]
5
6def bfs(board, N, M, sp):
7 global visited
8 q = deque()
9 q.append(sp+[1])
10
11 while q:
12 cy, cx, cnt = q.popleft()
13 visited[cy][cx] = True
14 for i in range(4):
15 x = cx
16 y = cy
17 while True:
18 x += vx[i]
19 y += vy[i]
20 if not (0 <= x < N and 0 <= y < M) or board[y][x] == 'D':
21 x -= vx[i]
22 y -= vy[i]
23 break
24 if board[y][x] == 'G':
25 return cnt
26 if not visited[y][x]:
27 q.append([y, x, cnt+1])
28 return -1
29
30def solution(board):
31 global visited
32 N = len(board[0])
33 M = len(board)
34
35 visited = [[False] * len(board[0]) for _ in range(len(board))]
36 for i in range(M):
37 for j in range(N):
38 if board[i][j] == 'R':
39 sp = [i, j]
40
41 return bfs(board, N, M, sp)
문제
- 2차원 리스트 board가 주어진다
- ‘.‘은 빈공간, ‘R’은 처음위치, ‘D’는 장애물, ‘G’는 목표지점 이다
- 장애물이나 맨 끝까지 부딪힐때까지 한 방향으로 이동한다
- 목표지점에 정확이 멈춰설때까지 몇번 이동해야하는지 구하라, 도달할 수 없다면 -1을 반환하라
- TC
- input
["…D..R", “.D.G…”, “….D.D”, “D….D.”, “..D…."]
- ouput
7
- input
해결방법
- bfs로 풀었다
- 이때 queue안에 cnt변수도 넣어서 몇번 이동했는지 저장한다.