~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/18405
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ํน์ ์์น๋ฅผ ์ค์ฌ์ผ๋ก ์ํ์ข์ฐ ๋ป์ด๊ฐ๋ฏ๋ก BFS๊ฐ ์ ์
- ์ซ์๊ฐ ์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ฐ์ ๋์ด์ผ ํ๋ฏ๋ก ๋ฆฌ์คํธ๋ก ๋ฐ์ ์ ๋ ฌ ํ ํ๋ก ์ ํํ๋ค!
- ํ์ ๊ฐ์ด ์์ด์ง ๋๊น์ง ๊บผ๋ด ์ํ์ข์ฐ์ ๊ฐ ๊ฐ์ด ๋ค์ ํ์ ๋ฃ๋ ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ํ์ธํ๋ค.
- ํ์์ ๊บผ๋ธ ๊ฐ์ ์๊ฐ์ด S์ ๊ฐ๋ค๋ฉด ์ข ๋ฃ
- X-1 ํ Y-1 ์ด์ ๊ฐ์ ๋ฐฐ์ด์์ ๋ฐํํ๋ค.
์์ฑ ์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
dr = [1, -1, 0, 0] # down, up, right, left
dc = [0, 0, 1, -1]
N, K = map(int, input().split())
board = [] # ๋ฐ์ด๋ฌ์ค ์ ๋ณด ๋ฐ์์ฌ ๋ฐฐ์ด
for _ in range(N):
board.append(list(map(int, input().split())))
S, X, Y = map(int, input().split()) # ์๊ฐ, ํ, ์ด
q = []
for i in range(N):
for j in range(N):
if board[i][j] != 0: # ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น
q.append((board[i][j], i, j, 0)) # ๋ฐ์ด๋ฌ์ค ์ ๋ณด, ํ, ์ด, ํ๋ฌ๊ฐ ์๊ฐ
q.sort() # (์ฃผ์) ๋ฆฌ์คํธ๋ก ๋ฐ์ ์ ๋ ฌ ํ queue๋ก ๋ณ๊ฒฝ!
q = deque(q)
while q: # BFS
viru, row, col, time = q.popleft()
if time == S: # ์๊ฐ์ด S๋งํผ ์ง๋ฌ๋ค๋ฉด ์ข
๋ฃ
break
for d in range(4): # ์ํ์ข์ฐ ์ด๋
r = row + dr[d]
c = col + dc[d]
if -1 < r < N and -1 < c < N and not board[r][c]: # ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๊ณ ์์น ๊ฐ์ด 0์ผ ๋
board[r][c] = viru # ๋ฐ์ด๋ฌ์ค ๋ฐฐ์น
q.append((viru, r, c, time+1)) # ๋ค์ ๋ฒ ์์น๋ฅผ ํ์ ์ ์ฅ
print(board[X-1][Y-1])
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 1647 ๋์ ๋ถํ ๊ณํ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
---|---|
[Python] ๋ฐฑ์ค 1197 ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2023.05.23 |
[Python] ๋ฐฑ์ค 14502 ์ฐ๊ตฌ์ | BFS (0) | 2023.05.20 |
[Python] ๋ฐฑ์ค 4485 ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? | ๋ค์ต์คํธ๋ผ (0) | 2023.05.18 |
[Python] ๋ฐฑ์ค 1504 ํน์ ํ ์ต๋จ ๊ฒฝ๋ก | ๋ค์ต์คํธ๋ผ (0) | 2023.05.17 |