1from collections import deque
 2
 3vx = [0, 0, -1, 1]
 4vy = [-1, 1, 0, 0]
 5
 6def bfs(maps, N, M, p1, p2):
 7    visited = [[False]*M for _ in range(N)]
 8    q = deque()
 9    q.append(list(p1)+[0])
10
11    while q:
12        curY, curX, cnt = q.popleft()
13
14        if p2 == (curY, curX):
15            return cnt
16
17        for i in range(4):
18            x = curX + vx[i]
19            y = curY + vy[i]
20            if 0 <= x < M and 0 <= y < N and not visited[y][x] and maps[y][x] != 'X':
21                visited[y][x] = True
22                q.append([y, x, cnt+1])
23    return -1
24
25def solution(maps):
26    answer = 0
27    N = len(maps)
28    M = len(maps[0])
29
30    sp = (0, 0)
31    lp = (0, 0)
32    ep = (0, 0)
33
34    for i in range(N):
35        for j in range(M):
36            if maps[i][j] == 'S':
37                sp = (i, j)
38            elif maps[i][j] == 'L':
39                lp = (i, j)
40            elif maps[i][j] == 'E':
41                ep = (i, j)
42
43    tmp = bfs(maps, N, M, sp, lp)
44    if tmp == -1:
45        return -1
46
47    answer += tmp
48
49    tmp = bfs(maps, N, M, lp, ep)
50    if tmp == -1:
51        return -1
52
53    answer += tmp
54
55    return answer

๋ฌธ์ œ

 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)

๋ฌธ์ œ