BFS - 단지번호붙이기 [2667번]

2022. 7. 14. 13:162022/BaekJoon_알고리즘

Queue 를 이용한 BFS로 풀이한 문제이다. 

from collections import deque

N = int(input())
graph = []; visited = []
for _ in range(N):
    tmp = list(map(int, input()))
    graph.append(tmp)   
    visited.append(list(map(lambda x : x == 1, tmp)))
    
result = []
dx = [1, 0, -1, 0]; dy = [0, 1, 0, -1]
for i in range(N):
    for j in range(N):
        if graph[i][j] == 1 and visited[i][j] == True:
            q = deque([(i, j)])
            num = 1
            visited[i][j] = False
            while q:
                x, y = q.popleft()
                for n in range(4):
                    nx = dx[n]+x; ny = dy[n]+y
                    if 0<=nx<N and 0<=ny<N and graph[nx][ny] == 1 and visited[nx][ny] == True:
                        visited[nx][ny] = False
                        q.append([nx, ny])
                        num+=1
            result.append(num)
    
result.sort()
print(len(result))
for r in result:
    print(r)

'2022 > BaekJoon_알고리즘' 카테고리의 다른 글

DFS - 촌수계산 [2644번]  (0) 2022.07.17
BFS - 숨바꼭질 [1697번]  (0) 2022.07.15
BFS - 미로 탐색 [2178번]  (0) 2022.07.14
DFS - 연결 요소의 개수[11724번]  (0) 2022.04.18
DFS - DFS와BFS[1260번]  (0) 2022.04.17