Coding Test/Algorithms

[๋ฐฑ์ค€]14940. ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ/Python - Silver1

The Engineer, Lucy 2025. 3. 10. 18:06

โ“๋ฌธ์ œ

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

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 41932 KB, ์‹œ๊ฐ„: 488 ms

๋ถ„๋ฅ˜

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

๋ฌธ์ œ ์„ค๋ช…

์ง€๋„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋ชจ๋“  ์ง€์ ์— ๋Œ€ํ•ด์„œ ๋ชฉํ‘œ์ง€์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ.

๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์˜ค์ง ๊ฐ€๋กœ์™€ ์„ธ๋กœ๋กœ๋งŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

โœ๐Ÿปํ’€์ด

์ด ๋ฌธ์ œ๋Š” BFS์ด๋‹ค. ๋ฌธ์ œ์—์„œ 2๋Š” ๋ชฉํ‘œ์ง€์ ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•… ์œ„์—์„œ ๋ชฉํ‘œ์ง€์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ถœ๋ฐœ์ง€๋ฅผ ๋ชฉํ‘œ์ง€์ ์œผ๋กœ ๋‘๋ฉด ๋œ๋‹ค.

๋ชฉํ‘œ์ง€์ ์ด ์ •ํ™•ํžˆ (0, 0)์—์„œ ์ฃผ์–ด์ง„๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์œผ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ๋ชฉํ‘œ์ง€์ ์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชฉํ‘œ์ง€์ ์„ ์ฐพ์•„ ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ, ๋ฐฉ๋ฌธํ•œ ๊ณณ์ธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋™์‹œ์— ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด visited๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ๊ณ„์‚ฐํ•œ๋‹ค.

๊ฐ ๊ฑฐ๋ฆฌ์˜ ๊ณ„์‚ฐ์ด ๋๋‚˜๋ฉด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•…์ด์ง€๋งŒ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์€ -1๋กœ ์ถœ๋ ฅํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” visited ๊ฐ’์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’ป์ฝ”๋“œ

import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
visited = [[0 for _ in range(m)] for _ in range(n)]
dy = [1, 0, 0, -1]
dx = [0, 1, -1, 0]

q = deque()

def bfs(y, x):
    q.append((y, x))
    board[y][x] = 0

    while q:
        y, x = q.popleft()

        for i in range(4):
            ny, nx = y + dy[i], x + dx[i]

            if 0 <= ny < n and 0<= nx < m and not visited[ny][nx] and board[ny][nx] == 1:
                visited[ny][nx] = visited[y][x] + 1
                q.append((ny, nx))

for y in range(n):
    for x in range(m):
        if board[y][x] == 2:
            bfs(y, x)
            break

for y in range(n):
    for x in range(m):
        if board[y][x] > 0 and not visited[y][x]:
            print(-1, end=' ')
        else:
            print(visited[y][x], end=' ')
    print()

๐Ÿ“ํ›„๊ธฐ

bfs ๋ถ€๋ถ„์„ ํ•จ์ˆ˜๋กœ ๋”ฐ๋กœ ๋นผ์„œ ๋งŒ๋“ค์—ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ด ์ค„์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ค„์ผ ์ˆ˜ ์žˆ์„๊นŒ?