ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
NxN์ ์ํ๊ด์ ๋ฐ์ด๋ฌ์ค๋ค์ด ์์ ๋, ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ 1๋ถํฐ K๊น์ง ์กด์ฌํ๋ค. ์ด๋, 1๋ฒ ๋ฐ์ด๋ฌ์ค๋ถํฐ ์ฐ์ ์ ์ผ๋ก ์ ์ผ๋ ๋, S์ด์ X, Y์ ์ ์ผ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค. ์ด๊ธฐ์ ์ ์ผ๋์ง ์์ ๊ณณ์ 0, ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ์ 1 ~ K ์ฌ์ด์ ์๋ก ํ์๋๋ค.
- BFS๋ฅผ ํตํด ํ์ํ์ฌ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
- ์ต์ด์ ์ฃผ์ด์ง ์ํ๊ด์์ ๋ฐ์ด๋ฌ์ค์ ์ข
๋ฅ๋ฅผ ์ฐพ๊ณ , ์ขํ๋ฅผ ๊ธฐ๋กํ๋ค.
- 1๋ฒ ๋ฐ์ด๋ฌ์ค ๋ถํฐ ์ ์ผ๋์ด์ด์ผ ํ๋ฏ๋ก ์ฐพ์ ๋ฐ์ด๋ฌ์ค๋ฅผ ์ ๋ ฌํ์ฌ `deque`์ ์ฝ์ ํ๋ค.
- ์, ํ, ์ข, ์ฐ๋ก ํ์ํ์ฌ ์ ์ผ์ํจ๋ค.
- ์ ์ผ์ ์งํํ๋ฉฐ, ์๊ฐ์ด S๊ฐ ๋๋ ๊ฒฝ์ฐ ์ ์ผ์ ์ค๋จ์ํจ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < n and 0 <= y < n and not graph[x][y]
def bfs(start):
q = deque(start)
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
while q:
cur_virus, x, y, time = q.popleft()
if time == target[S]:
break
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if visitable(next_x, next_y):
graph[next_x][next_y] = cur_virus
q.append((cur_virus, next_x, next_y, time + 1))
if __name__ == '__main__':
S, X, Y = 0, 1, 2
n, k = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
target = list(map(int, stdin.readline().split()))
virus = []
for i in range(n):
for j in range(n):
if graph[i][j] != 0:
virus.append([graph[i][j], i, j, 0])
bfs(sorted(virus))
print(graph[target[X] - 1][target[Y] - 1])
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 9935 ๋ฌธ์์ด ํญ๋ฐ (0) | 2020.10.03 |
---|---|
๋ฐฑ์ค: 2573 ๋น์ฐ (0) | 2020.10.02 |
๋ฐฑ์ค: 2343 ๊ธฐํ ๋ ์จ (0) | 2020.10.01 |
๋ฐฑ์ค: 5014 ์คํํธ๋งํฌ (0) | 2020.10.01 |
๋ฐฑ์ค: 16195 1, 2, 3 ๋ํ๊ธฐ 9 (0) | 2020.09.30 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ