์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 14940 ๐Ÿฅˆ] ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ

1eehyunji 2023. 8. 20. 16:12

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

 

14940๋ฒˆ: ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ

์ง€๋„์˜ ํฌ๊ธฐ n๊ณผ m์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์„ธ๋กœ์˜ ํฌ๊ธฐ, m์€ ๊ฐ€๋กœ์˜ ํฌ๊ธฐ๋‹ค.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) ๋‹ค์Œ n๊ฐœ์˜ ์ค„์— m๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 0์€ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๋•…์ด๊ณ  1์€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•…, 2๋Š” ๋ชฉํ‘œ์ง€์ ์ด

www.acmicpc.net

๋ฌธ์ œ

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

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

์ž…๋ ฅ

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

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

์ถœ๋ ฅ

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

๋ฌธ์ œํ’€์ด

import sys
from collections import deque

n,m=map(int, sys.stdin.readline().split(' '))
area=[list(map(int, sys.stdin.readline().split(' '))) for _ in range(n)]

visited = [[0] * (m) for _ in range(n)]
dist=[[0]*(m) for _ in range(n)]
def bfs(starty, startx):
    global visited, area, dist
    queue=deque()
    queue.append((starty, startx,0))
    visited[starty][startx]=1
    directions=[(0,1),(1,0),(0,-1),(-1,0)]
    while queue:
        y,x,d=queue.popleft()
        for di in directions:
            dy=y+di[0]
            dx=x+di[1]
            if 0<=dy<n and 0<=dx<m and visited[dy][dx]==0 and area[dy][dx]==1:
                queue.append((dy,dx,d+1))
                dist[dy][dx]=d+1
                visited[dy][dx]=1


# ์‹œ์ž‘ ์ง€์  ์ฐพ๊ธฐ
for i in range(n):
    for j in range(m):
        if area[i][j]==2:
            bfs(i,j)
            # ์ถœ๋ ฅํ•˜๊ณ ,ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
            for y in range(n):
                for x in range(m):
                    # ๊ธฐ์กด์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์ง€๋งŒ, ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ง€์—ญ์ธ ๊ฒฝ์šฐ
                    if dist[y][x]==0 and area[y][x]==1:
                        dist[y][x]=-1
            for y in range(n):
                print(*dist[y], sep=' ')
            sys.exit(0)
  • BFS๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋‹ค!
  • ์ž…๋ ฅ๋ฐ›์€ ์ง€์ ์˜ ์ •๋ณด ๋ฐฐ์—ด area๋ฅผ ๋Œ๋ฉด์„œ, area ๊ฐ’์ด 2์ธ ๋ชฉํ‘œ์ง€์ ์„ ์ฐพ์•„์„œ ๊ทธ ์œ„์น˜๋ถ€ํ„ฐ bfs๋ฅผ ๋Œ๋ฉด์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ๋ชฉํ‘œ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ์œ„์น˜์ธ์ง€ ๋ณ€์ˆ˜ d์— ์ €์žฅํ•ด์ฃผ๊ณ  ๊ฐ ์ง€์ ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•œ dist ๋ฐฐ์—ด์„ ๊ฐฑ์‹ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 
  • ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์ง€๋งŒ(area ๊ฐ’์ด 1), ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ง€์—ญ์ด๋ผ dist ๊ฐ’์ด 0์ธ ์œ„์น˜๋Š” -1๋กœ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.