[๋ฐฑ์ค€-18405] ๊ฒฝ์Ÿ์  ์ „์—ผ / Python

๐Ÿ“š Problem Solving/Baekjoon

 

18405๋ฒˆ: ๊ฒฝ์Ÿ์  ์ „์—ผ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N, K๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ์‹œํ—˜๊ด€์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ–‰์€ N๊ฐœ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ•ด๋‹น ์œ„์น˜

www.acmicpc.net

import sys
from collections import deque

input = sys.stdin.readline

n, k = map(int, input().split())
graph = []
for _ in range(n):
    graph.append(list(map(int, input().split())))
s, x, y = map(int, input().split())

queue = []
for i in range(n):
    for j in range(n):
        if graph[i][j] != 0:
            queue.append((graph[i][j], i, j, 0))

queue.sort()
queue = deque(queue)

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

while queue:
    virus, a, b, time = queue.popleft()
    if time == s:
        break
    for i in range(4):
        nx = a + dx[i]
        ny = b + dy[i]
        if 0 <= nx < n and 0 <= ny < n and graph[nx][ny] == 0:
            graph[nx][ny] = virus
            queue.append((virus, nx, ny, time + 1))

print(graph[x - 1][y - 1])

 

ํ•ด์„ค

bfs๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ฃผ์–ด์ง„ ์‹œํ—˜๊ด€์œผ๋กœ 0์ด ์•„๋‹Œ ๊ฐ’์„ ์ฐพ์•„ ํ์— ๋„ฃ๊ณ  ์ •๋ ฌ์„ ์‹œ์ผœ์ค€๋‹ค.

1๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ํ•ด์ฃผ๊ณ  1๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ƒํ•˜์ขŒ์šฐ๊ฐ€ 0์ด๋ผ๋ฉด 1์„ ๋Œ€์ž…ํ•œ๋‹ค. ์ด๋ฅผ 2, 3๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค์—๋„ ๋˜‘๊ฐ™์ด ์ ์šฉํ•œ ํ›„, ์‹œ๊ฐ„์€ 1์ดˆ ๋Š˜์–ด๋‚œ๋‹ค.

 

s์™€ ๋Š˜์–ด๋‚œ ์‹œ๊ฐ„์ด ๊ฐ™์•„์กŒ์„ ๋•Œ, ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉˆ์ถ”๊ณ  ๊ตฌํ•  ์ขŒํ‘œ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.