<내 코드>
from collections import deque
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'
done.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 done):
maps[nx][ny] = '0'
queue.append((nx, ny))
done.append((nx, ny))
return cnt
N = int(input())
maps = [list(input()) for _ in range(N)]
done = []
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])
크게 어려움 없이 BFS 알고리즘만 구현하면 쉽게 풀리는 문제였다. 각 BFS마다 total과 cnt 값을 올려줘 총 몇 번의 BFS 탐색을 했고, 각 탐색 중 몇 번의 인접한 요소들을 찾아냈는지 표시했다. 그리고 그 값들을 출력해주면 끝이다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 1987] 알파벳 - Python (DFS, 백트래킹) (0) | 2020.09.03 |
---|---|
[백준 8958] OX 퀴즈 - Python (문자열) (0) | 2020.09.02 |
[백준 7576] 토마토 - Python (그래프, BFS) (0) | 2020.09.01 |
[백준 4963] 섬의 개수 - Python (그래프, BFS) (0) | 2020.08.31 |
[백준 2583] 영역 구하기 - Python (그래프, BFS) (0) | 2020.08.31 |