๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold3] 2638๋ฒˆ_์น˜์ฆˆ

Dbswnstjd 2023. 4. 28. 11:36

๋ฌธ์ œ

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

 

2638๋ฒˆ: ์น˜์ฆˆ

์ฒซ์งธ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ N, M (5 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด ์œ„์˜ ๊ฒฉ์ž์— ์น˜์ฆˆ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜๊ณ , ์น˜์ฆˆ๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ 0์œผ๋กœ

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 2638๋ฒˆ ๋ฌธ์ œ - ์น˜์ฆˆ
from collections import deque
n, m = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
dx, dy = [0,0,-1,1],[1,-1,0,0]

def bfs():
    q = deque()
    visited = [[0]*m for _ in range(n)]
    q.append((0,0))
    visited[0][0] = 1
    
    while q:
        x, y = q.popleft()
        
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m:
                if graph[nx][ny] == 0 and not visited[nx][ny]:
                    q.append((nx, ny))
                    visited[nx][ny] = 1
                elif graph[nx][ny] == 1:
                    visited[nx][ny] += 1
    melted = []
    for i in range(n):
        for j in range(m):
            if visited[i][j] >= 2:
                melted.append((i,j))
    return melted

answer = 0
while True:
    melted = bfs()
    if not melted:
        break
    answer += 1
    for x, y in melted:
        graph[x][y] = 0
print(answer)

BFS ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์•Œ์•˜๋Š”๋ฐ ๋‚ด๋ถ€ ์น˜์ฆˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. 

์น˜์ฆˆ๊ฐ€ ๋…น๋Š” ์กฐ๊ฑด์€ ์™ธ๋ถ€ ๊ณต๊ธฐ 2๋ฒˆ์ด์ƒ ์ ‘์ด‰ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋ฉด์„œ visited ๊ฐ€ 2๋ฒˆ ์ด์ƒ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ์น˜์ฆˆ๊ฐ€ ๋…น๋Š” ๊ฒƒ์ด๋‹ค.