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

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

Dbswnstjd 2023. 3. 31. 15:56

๋ฌธ์ œ

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

 

2636๋ฒˆ: ์น˜์ฆˆ

์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์ด ์žˆ๊ณ , ๊ทธ ์œ„์— ์–‡์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ํŒ์˜ ๊ฐ€์žฅ์ž๋ฆฌ(<๊ทธ๋ฆผ 1>์—์„œ ๋„ค๋ชจ ์นธ์— X์นœ ๋ถ€๋ถ„)์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“

www.acmicpc.net

ํ’€์ด

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

graph = [list(map(int, input().split())) for _ in range(n)]

def bfs():
    visited = [[0]*m for _ in range(n)]
    
    q = deque()
    q.append((0,0))
    visited[0][0] = 1
    cnt = 0
    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 and not visited[nx][ny]:
                if graph[nx][ny] == 0:
                    visited[nx][ny] = 1
                    q.append((nx, ny))
                elif graph[nx][ny] == 1:
                    graph[nx][ny] = 0
                    cnt += 1
                    visited[nx][ny] = 1
    cheese.append(cnt)
    return cnt

cheese = []        
time = 0
while True:
    time += 1
    cnt = bfs()
    
    if cnt == 0:
        break
print(time-1)
print(cheese[-2])

1์„ ์ฐพ์•„์„œ BFS๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ 0์—์„œ BFS๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

๊ฑฐ๊พธ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ์˜€๋Š”๋ฐ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.