๐Ÿ“š Study/Baekjoon

[Silver I] 14940 - ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ

์œฐ๊ฐฑ 2025. 5. 18. 11:45

๋ฌธ์ œ

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

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

์ž…๋ ฅ

์ง€๋„์˜ ํฌ๊ธฐ n๊ณผ m์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์„ธ๋กœ์˜ ํฌ๊ธฐ, m์€ ๊ฐ€๋กœ์˜ ํฌ๊ธฐ๋‹ค.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000)

๋‹ค์Œ n๊ฐœ์˜ ์ค„์— m๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 0์€ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๋•…์ด๊ณ  1์€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•…, 2๋Š” ๋ชฉํ‘œ์ง€์ ์ด๋‹ค. ์ž…๋ ฅ์—์„œ 2๋Š” ๋‹จ ํ•œ๊ฐœ์ด๋‹ค.

์ถœ๋ ฅ

๊ฐ ์ง€์ ์—์„œ ๋ชฉํ‘œ์ง€์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์›๋ž˜ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๋•…์ธ ์œ„์น˜๋Š” 0์„ ์ถœ๋ ฅํ•˜๊ณ , ์›๋ž˜ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•…์ธ ๋ถ€๋ถ„ ์ค‘์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์œ„์น˜๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

15 15
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 1 0 0 0
1 1 1 1 1 1 1 1 1 1 0 1 1 1 1

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
11 12 13 14 15 16 17 18 19 20 0 0 0 0 25
12 13 14 15 16 17 18 19 20 21 0 29 28 27 26
13 14 15 16 17 18 19 20 21 22 0 30 0 0 0
14 15 16 17 18 19 20 21 22 23 0 31 32 33 34

# ํ’€์ด ๋ฐฉ๋ฒ•

  1. ์‹œ์ž‘์œ„์น˜์ธ ‘2’๋ฅผ ์ฐพ๋Š”๋‹ค
  2. ์‹œ์ž‘์œ„์น˜๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์ง€์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ dist๋ฐฐ์—ด์— ๋‹ด๋Š”๋‹ค

# ์ฝ”๋“œ

# 2025-05-18 10:30 - 11:05
from collections import deque
import sys
sys.stdin = open("input.txt","r")
n, m = map(int,sys.stdin.readline().split())
grid = [list(map(int,sys.stdin.readline().split())) for _ in range(n)]
dist = [[-1] * m for _ in range(n)]

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

def bfs(x,y):  
    queue = deque()
    queue.append((x,y))
    dist[x][y] = 0  # ์‹œ์ž‘์ ์€ ๊ฑฐ๋ฆฌ 0
    
    while queue:
        x,y = queue.popleft()

        for d in range(4):
            nx, ny = x + dx[d], y + dy[d]
            if 0 <= nx < n and 0 <= ny < m:
                if grid[nx][ny] in (1,2) and dist[nx][ny] == -1:
                    dist[nx][ny] = dist[x][y] + 1
                    queue.append((nx,ny))
    
    return 0

# ์‹œ์ž‘ ์ง€์  ์ฐพ๊ธฐ (๊ฐ’์ด 2์ธ ๊ณณ)
for i in range(n):
    for j in range(m):
        if grid[i][j] == 2:
            bfs(i, j)

for i in range(n):
    for j in range(m):
        if grid[i][j] == 0:
            print(0, end = ' ')
        else:
            print(dist[i][j], end = ' ')
    print()

 


# ์ฐธ๊ณ 

์ฒ˜์Œ์— ์™œ ์ด๋Ÿฐ์‹์œผ๋กœ ํ’€์—ˆ์ง€..? 2 ์ง€์ ์„ ๋จผ์ € ์ฐพ์•˜์–ด์•ผ ํ–ˆ๋‹ค

# 2025-05-18 10:30 -11:03 
from collections import deque
import sys
# sys.stdin = open("input.txt","r")
n, m = map(int,sys.stdin.readline().split())
grid = [[0]*m for _ in range(n)]
for i in range(n):
    grid[i] = list(map(int,sys.stdin.readline().split()))


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

def bfs(x,y):
    # ๊ฐˆ ์ˆ˜ ์—†๋Š” ๋•…์ธ ๊ฒฝ์šฐ
    if grid[x][y] == 0:
        return 0
    
    visited = [[False]*m for _ in range(n)]
    queue = deque()
    queue.append((x,y,0))
    visited[x][y] = True
    
    while queue:
        x,y,cnt = queue.popleft()

        if grid[x][y] == 2:
            return cnt

        for d in range(4):
            nx, ny = x + dx[d], y + dy[d]
            if 0 <= nx < n and 0 <= ny < m:
                if grid[nx][ny] in (1,2) and not visited[nx][ny]:
                    visited[nx][ny] = True
                    queue.append((nx,ny,cnt+1))
    
    return 0


for i in range(n):
    for j in range(m):
        cnt = bfs(i,j)
        print(cnt, end = ' ')
    print()