๐๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/169199
โจํต์ฌ ๋ด์ฉ
์, ํ, ์ข, ์ฐ 4๋ฐฉํฅ ์ค ํ๋๋ฅผ ์ ํํด์
๊ฒ์ํ ์์ ์ฅ์ ๋ฌผ์ด๋ ๋งจ ๋์ ๋ถ๋ชํ ๋๊น์ง ๋ฏธ๋๋ฌ์ ธ ์ด๋ํ๋ ๊ฒ์ ํ ๋ฒ์ ์ด๋์ผ๋ก ์น๋ค.
๐คํด๊ฒฐ ์์ด๋์ด
์ ํ: BFS
R์์ ์์ํ์ฌ ๋ฏธ๋๋ฌ์ ธ ์ด๋ํ๋ฉฐ G์ ๋์ฐฉํด์ผ ํ๋ค.
-> ์ผ๋ฐ์ ์ธ ์ต๋จ๊ฑฐ๋ฆฌ BFS ๋ฌธ์ ์์ ์ด๋ ๊ฑฐ๋ฆฌ(๋ฐฉ์)๋ฅผ ์กฐ์ ํด ์ฃผ๋ฉด ๋๋ค!
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ก๋ด์ ๋์ฐฉ ์์น๋ฅผ ํ์ํ ์ ์๋ค.
๋ก๋ด์ ํ์ฌ ์์น์์ ์ํ์ข์ฐ ์ค ์ด๋ ๊ฐ๋ฅํ ์์น๋ก ์ด๋ ์ํค๋ฉฐ ๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
๋์ฐฉ ์์น๋ฅผ visited ๋ฐฐ์ด์ ์ด๋ ํ์๋ก ํ์ํ๋ฉฐ ์ด๋ํ๋ค.
๐ก ์ฃผ์ ํ ์
# ์ด๋ ํจ์ - ํ ๋ฒ์ ๋ฏธ๋์ด์ง๋ฏ ์ด๋
def move(x, y, dx, dy):
nx, ny = x + dx, y + dy
while in_range(nx, ny) and board[nx][ny] != 'D':
nx += dx
ny += dy
return nx - dx, ny - dy # D ์์น์์ while ๋ฌธ์ด ์ ์ง๋๋ฏ๋ก ํ ์นธ์ฉ ๋ค๋ก ๊ฐ์ผ ํ๋ค.
๊ธฐ์กด ์ํ์ข์ฐ ํ ์นธ์ฉ ์ด๋ํ๋ bfsํจ์์์๋ nx, ny์ ์์น๋ฅผ nx, ny = x + dx, y + dy๋ก ์ก์์ฃผ์๋ค.
๊ทธ๋ฌ๋ ๋ฆฌ์ฝ๋ ๋ก๋ด์ ์ฅ์ ๋ฌผ์ ๋ฟ์ ๋๊น์ง ๋ฏธ๋๋ฌ์ง๋ฏ ์ด๋ํด์ผ ํ๋ฏ๋ก
์ฅ์ ๋ฌผ์ ๋ฟ์ ๋ ๊น์ง dx, dy ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ํจ์๋ฅผ ์์ฑํ๋ค.
(dx, dy์ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ฅ์ ๋ฌผ(๋ฒ์ ๋ฒ์ด๋จ, D)์ ๋ง๋๊ธฐ ์ ๊น์ง ์ด๋ํ๋ ์ฝ๋)
โ ์ ๋ต ์ฝ๋ (Python)
from collections import deque
def solution(board):
n = len(board)
m = len(board[0])
dxs, dys = [0, 0, 1, -1], [-1, 1, 0, 0]
# ๋ก๋ด ์ด๊ธฐ ์์น ๋ฑ๋ก
for i in range(n):
for j in range(m):
if board[i][j] == 'R':
rx, ry = i, j
# bfs ์ฌ์ ์ค๋น
q = deque()
q.append((rx, ry))
visited = [[0 for _ in range(m)] for _ in range(n)]
visited[rx][ry] = 1
# ๋ฒ์ ์ฒดํฌ ํจ์
def in_range(x, y):
if x < 0 or x >= n or y < 0 or y >= m:
return False
return True
# ์ด๋ ํจ์ - ํ ๋ฒ์ ๋ฏธ๋์ด์ง๋ฏ ์ด๋
def move(x, y, dx, dy):
nx, ny = x + dx, y + dy
while in_range(nx, ny) and board[nx][ny] != 'D':
nx += dx
ny += dy
return nx - dx, ny - dy
def bfs():
while q:
x, y = q.popleft()
for dx, dy in zip(dxs, dys):
nx, ny = move(x, y, dx, dy) # nx, ny = x + dx, y + dy๋ฅผ ๋ณ๊ฒฝ
if in_range(nx, ny) and not visited[nx][ny] and board[nx][ny] != 'D':
q.append((nx, ny))
visited[nx][ny] = visited[x][y] + 1
# ์ข
๋ฃ ์กฐ๊ฑด
if board[nx][ny] == 'G':
return visited[x][y]
# G ๋ง๋์ง ๋ชปํ๋ฉด -1 ๋ฆฌํด
return -1
ans = bfs()
return ans
๐ถ ์ ์ฌ ๋ฌธ์
๋ฐฑ์ค_13460 ๊ตฌ์ฌ ํ์ถ 2
13460๋ฒ: ๊ตฌ์ฌ ํ์ถ 2 (acmicpc.net)
๋ฐฑ์ค_7562 ๋์ดํธ์ ์ด๋
'algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ (Python) (0) | 2024.07.16 |
---|---|
[Programmers] ๋ ์ ์ฌ์ด์ ์ ์ ์(Python, Java) (0) | 2024.07.04 |
[Programmers] ์๊ฒฉ ์์คํ (Python, Java) (0) | 2024.07.03 |
[Programmers] ๋ฑ๊ตฃ๊ธธ (Python, Java) (0) | 2024.07.02 |
[programmers] ์ ์ ์ผ๊ฐํ - Python, Java (0) | 2024.07.01 |