알고리즘/dfs,bfs

[파이썬🐍] 백준 2667 : 단지 번호 붙이기

코딩개미뚠뚠 2021. 4. 7. 17:54
반응형

변수가 많아져서 약간 복잡했다.

bfs 방식으로 해결할 수 있었다.

from collections import deque
from sys import stdin
def bfs(x,y):
    dx = [1,-1,0,0]
    dy = [0,0,1,-1]
    cnt = 0
    queue = deque()

    queue.append((x,y))
    maps[x][y] = '0'
    visited.append((x,y))

    while queue:
        now=queue.popleft()
        cnt += 1

        for i in range(4):
            nx = now[0] + dx[i]
            ny = now[1] + dy[i]
            if (0 <= nx < n) and (0 <= ny < n):
                if maps[nx][ny] == '1' and ((nx, ny) not in visited):
                    maps[nx][ny] = '0'
                    queue.append((nx, ny))
                    visited.append((nx, ny))
    return cnt

n = int(input())
maps = [list(stdin.readline()) for _ in range(n)]
visited = []
total = 0
result = []

for i in range(n):
    for j in range(n):
        if maps[i][j] == '1':
            result.append(bfs(i,j))
            total += 1

result.sort()
print(total)
for i in range(total):
    print(result[i])
반응형