โ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/169199
๐๏ธ ์์ด๋์ด
- ๊ธฐ๋ณธ bfs + ๋๊น์ง ์ง์ง
1. ๋ค์ ์์น๊ฐ ๋ฒ์ ์์ ์๋์ง, ์ฅ์ ๋ฌผ์ด ์๋ ๊ณณ์ธ์ง ํ์ธ
2-A. ๋ค์ ์์น๋ก ์ด๋์ด ๊ฐ๋ฅํ๋ค๋ฉด ๊ณ์ ์ด๋ (continue)
2-B. ๋ค์ ์์น๋ก ์ด๋์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ์ง์ ์์น queue์ append, cost + 1 (break)
๐ป ํ์ด
from collections import deque
def bfs(board):
row, col = len(board), len(board[0])
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
visited = [[False] * col for _ in range(row)]
queue = deque()
# ์ถ๋ฐ์ ์ฐพ๊ธฐ
for i in range(row):
r_index = board[i].find("R")
if r_index != -1:
queue.append((i, r_index, 0))
visited[i][r_index] = True
break
while queue:
x, y, cost = queue.popleft()
if board[x][y] == "G":
return cost
for i in range(4):
nx, ny = x, y
while True:
nx += dx[i]
ny += dy[i]
# ๊ณ์ ๊ฐ ์ ์์ผ๋ฉด
if 0 <= nx < row and 0 <= ny < col and board[nx][ny] != "D":
continue
# ๊ฐ ์ ์์ผ๋ฉด ๋ฐ๋ก ์ง์ ์๋ฆฌ append
else:
if not visited[nx - dx[i]][ny - dy[i]]:
queue.append((nx - dx[i], ny - dy[i], cost + 1))
visited[nx - dx[i]][ny - dy[i]] = True
break
else:
break
return -1
def solution(board):
return bfs(board)
print(solution(["...D..R", ".D.G...", "....D.D", "D....D.", "..D...."]))
'Algorithm | Language > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers/Lv.3] ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ (0) | 2023.06.12 |
---|---|
[programmers/Lv.3] ์ธ์ฌ๊ณ ๊ณผ (0) | 2023.06.12 |
[programmers/Lv.2] ๋ ํ ํฉ ๊ฐ๊ฒ ๋ง๋ค๊ธฐ (0) | 2023.03.10 |
[programmers/Lv.2] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (1) | 2023.03.10 |
[programmers/Lv.2] ํผ์์ ํ๋ ํฑํํ (1) | 2023.03.06 |