๋ฐ์ํ
๐ฑ ๋ฌธ์
๐ฑ ํ์ด
0. ์ ๋ ฅ ๋ฐ๊ธฐ
n, k = map(int, input().split())
graph = []
for i in range(n):
graph.append(list(map(int, input().split())))
s, x, y = map(int, input().split())
- ์ฒซ์งธ์ค์ ์ํ๊ด์ ํฌ๊ธฐ(
n
)์ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ์ ๊ฐ์(k
)๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค. - ๋ค์
n
๊ฐ์ ์ค์ ์ํ๊ด์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค. - ๋ง์ง๋ง ์ค์ ์๊ฐ(
s
), ์ถ๋ ฅํ ์ํ๊ด ์นธ์ ์ ๋ณด(x
,y
)๋ฅผ ์ ๋ ฅ ๋ฐ์ต๋๋ค.
1. ์ํ์ข์ฐ ๋ฐฉํฅ ์ค์
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
๋ฐ์ด๋ฌ์ค๋ ์ํ์ข์ฐ๋ก ์ฆ์ํ๋ฏ๋ก ์, ํ, ์ข, ์ฐ ๋ฐฉํฅ์ ์ค์ ํด์ค๋๋ค.
2. ๋งต์ ์์ ํ์ํ๋ฉฐ ๋ฐ์ด๋ฌ์ค ์์น ์ ๋ณด ์ ์ฅํ๊ธฐ
queue = deque([])
for i in range(n):
for j in range(n):
if graph[i][j] != 0:
queue.append((i, j))
๋งจ ์ฒ์ queue
์๋ ์
๋ ฅ๋ฐ์ ์ํ๊ด ์ ๋ณด์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น๋ฅผ ์ ์ฅํด์ค๋๋ค.
3. ๋งค ์ด๋ง๋ค ๋ฐ์ด๋ฌ์ค ํ์ฐ์ํค๊ธฐ
for sec in range(s):
# ๋งค ์ด์ ํ์ฐ๋ ๋ฐ์ด๋ฌ์ค ์์น ์ ์ฅํ ๋ฆฌ์คํธ
spread = []
while queue:
i, j = queue.popleft()
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or ny < 0 or nx > n - 1 or ny > n - 1:
continue
if graph[nx][ny] == 0 or (graph[nx][ny] > graph[i][j] and (nx, ny) in spread):
spread.append((nx, ny))
graph[nx][ny] = graph[i][j]
for l in spread:
queue.append(l)
- ์ด ๋ฌธ์ ๋ ๊ฐ๋ฅ ๊ณณ๊น์ง ํ ๋ฒ์ ํ์ํ๋ ๊ฒ์ด ์๋๋ผ ๋งค ์ด๋ง๋ค ๋ฐ์ด๋ฌ์ค๊ฐ ์ํ์ข์ฐ๋ก๋ง ํ์ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ณณ๊น์ง ํ๋ฒ์ ํ์ํ์ง ์๊ณ ์ฃผ์ด์ง ์ด(
s
)๋งํผ ๋ฐ๋ณตํ๋ฉฐ ๋ฐ๋ณตํ ๋๋ง๋คqueue
๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. spread
๋ฆฌ์คํธ๋ ๋งค ์ด์ ํ์ฐ๋ ๋ฐ์ด๋ฌ์ค์ ์์น๋ง ์ ์ฅํ๋ ๋ฆฌ์คํธ์ ๋๋ค.queue
์ ์๋ ๋ฐ์ด๋ฌ์ค๋ฅผ ๋นผ๋ด๊ฐ๋ฉฐ ์ํ์ข์ฐ ํ์ํ,spread
์ ๋ฃ๊ณ , queue์ ์๋ ๋ฐ์ด๋ฌ์ค๋ฅผ ๋ชจ๋ ๊บผ๋ด์์ ๋,queue
์spread
์ ์ ์ฅํด๋์ ์์น๋ฅผ ๋ฃ์ด์ค๋๋ค.- ๋ฐ์ด๋ฌ์ค๊ฐ ํ์ฐ๋๋ ๊ฒฝ์ฐ(
spread
์ ๋ฃ์ด์ง๋ ๊ฒฝ์ฐ)๋ ๋ค์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.- ํ์ฐ๋ ์์น์ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ(
graph[nx][ny]
๊ฐ 0์ธ ๊ฒฝ์ฐ) - ํ์ฐ๋ ์์น์ ํ์ฌ ํ์์ค์ธ ๋ฐ์ด๋ฌ์ค(
graph[i][j]
)๋ณด๋ค ํ์ฌ ์๊ฐ์ ํ์ฐ๋(spread
์ ์๋) ๋ ํฐ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ฒฝ์ฐ (graph[nx][ny] > graph[i][j] and (nx, ny) in spread
์ธ ๊ฒฝ์ฐ)
(๋งค ์ด๋ง๋ค ๋ฒํธ๊ฐ ๋ฎ์ ์ข ๋ฅ์ ๋ฐ์ด๋ฌ์ค๋ถํฐ ๋จผ์ ์ฆ์ํ๊ธฐ ๋๋ฌธ)
- ํ์ฐ๋ ์์น์ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ(
4. ์ถ๋ ฅํ๊ธฐ
print(graph[x - 1][y - 1])
๐ฑ ์ฝ๋
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# boj 18405 ๊ฒฝ์์ ์ ์ผ
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int, input().split())
graph = []
for i in range(n):
graph.append(list(map(int, input().split())))
s, x, y = map(int, input().split())
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
queue = deque([])
for i in range(n):
for j in range(n):
if graph[i][j] != 0:
queue.append((i, j))
for sec in range(s):
# ๋งค ์ด์ ํ์ฐ๋ ๋ฐ์ด๋ฌ์ค ์์น ์ ์ฅํ ๋ฆฌ์คํธ
spread = []
while queue:
i, j = queue.popleft()
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or ny < 0 or nx > n - 1 or ny > n - 1:
continue
if graph[nx][ny] == 0 or (graph[nx][ny] > graph[i][j] and (nx, ny) in spread):
spread.append((nx, ny))
graph[nx][ny] = graph[i][j]
for l in spread:
queue.append(l)
print(graph[x - 1][y - 1])
๋ฐ์ํ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #1976 ์ฌํ๊ฐ์(Python) (0) | 2023.02.21 |
---|---|
[BOJ] #13144 List of Unique Numbers (Python) (0) | 2023.02.21 |
[BOJ] #2230 ์ ๊ณ ๋ฅด๊ธฐ (Python) (0) | 2023.02.14 |
[BOJ] #9935 ๋ฌธ์์ด ํญ๋ฐ (Python) (0) | 2023.02.13 |
[BOJ] #2473 ์ธ ์ฉ์ก (Python) (0) | 2023.02.13 |
๋๊ธ