๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 18405 ๊ฒฝ์Ÿ์  ์ „์—ผ (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 10. 10.

<๋ฌธ์ œ ๋งํฌ>

https://www.acmicpc.net/problem/18405

 

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

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

www.acmicpc.net

<ํ’€์ด ์ „๋žต>

1. ํ† ๋งˆํ† ๋ž‘ ๋น„์Šทํ•˜๊ฒŒ ์ฒ˜์Œ์— ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ขŒํ‘œ๋ฅผ ํ์— ์ €์žฅํ•ด๋‘๊ณ  bfs๋ฅผ ๋Œ๋ฆฌ๋ฉด๋œ๋‹ค.

2. ๋‹จ ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ๋ฐ”์ด๋Ÿฌ์Šค๋ถ€ํ„ฐ ์ „์—ผ๋œ๋‹ค๋Š” ํŠน์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ bfs ๋Œ๋ฆฌ๊ธฐ ์ง์ „์— ํ๋ฅผ ํ•œ๋ฒˆ ์ •๋ ฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

<์ •๋‹ต ์ฝ”๋“œ>

from collections import deque
import sys, os, io, atexit

input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))

# 220921 18405 ๊ฒฝ์Ÿ์  ๊ฐ์—ผ

# ์ •๋‹ต์ฝ”๋“œ

# N: ๋ฐฐ์—ด์˜ ํฌ๊ธฐ, K: ๋ฐ”์ด๋Ÿฌ์Šค ๊ฐœ์ˆ˜
N, K = map(int, input().split())
# arr: ๋ฐฐ์—ด
arr = [list(map(int, input().split())) for _ in range(N)]
# S: ์‹œ๊ฐ„, X, Y: ๋ชฉํ‘œ ์ขŒํ‘œ
S, X, Y = map(int, input().split())

# virus: ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ขŒํ‘œ๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ
virus = []

# ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ขŒํ‘œ, ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜, ํƒ์ƒ‰ ์‹œ๊ฐ„ ์ดˆ๊นƒ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.
for r in range(N):
    for c in range(N):
        if arr[r][c]:
            virus.append((r, c, arr[r][c], 0))

# ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ •๋ ฌ
virus = deque(sorted(virus, key=lambda x: x[2]))

# ๋ธํƒ€ ํƒ์ƒ‰ ํƒ์ƒ‰ ๋ฐฉํ–ฅ
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]


# bfs ํ•จ์ˆ˜ ์„ ์–ธ
def bfs(virus=deque):

    while virus:
        r, c, virus_type, time = virus.popleft()
        # S์‹œ๊ฐ„๋งŒํผ ํƒ์ƒ‰์„ ๋‹ค ๋งˆ์ณค์„ ๊ฒฝ์šฐ
        if time == S:
            # ๋ชฉํ‘œ ์ขŒํ‘œ์˜ ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜ ์ถœ๋ ฅ
            print(arr[X - 1][Y - 1])
            return

        for i in range(4):
            nr = r + dr[i]
            nc = c + dc[i]
            # ํ•ด๋‹น ์˜์—ญ์ด ๋นˆ ๊ณต๊ฐ„์ผ ๋•Œ ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๋ฉด์„œ ํƒ์ƒ‰
            if 0 <= nr < N and 0 <= nc < N:
                if arr[nr][nc] == 0:
                    arr[nr][nc] = virus_type
                    virus.append((nr, nc, virus_type, time + 1))

    print(arr[X - 1][Y - 1])
    return


# bfs ํƒ์ƒ‰ ์‹ค์‹œ
bfs(virus)

๋Œ“๊ธ€