https://www.acmicpc.net/problem/2667
이전에 풀었던 문제보다 쉽게 구현이 가능한 문제이다.
bfs탐색을 연습하기 위해 bfs로 구현하였다. dfs로 구현하여도 클리어는 가능한 문제로 보인다.
또한 이번에는 단순 list,pop(0)을 이용하지 않고 deque를 선언하여 구현하였다.
from collections import deque
n = int(input())
arr = []
for i in range(n):
arr.append(list(map(int,input())))
dx, dy = [-1,1,0,0] , [0,0,-1,1]
q = deque()
total = 1
pri = []
for i in range(n):
for j in range(n):
if arr[i][j] == 1:
total += 1
q.append((i,j))
arr[i][j] = total
cnt = 1
while q:
x, y = q.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < n and 0 <= ny < n and arr[nx][ny] == 1:
arr[nx][ny] = total
cnt += 1
q.append((nx,ny))
pri.append(cnt)
pri.sort()
print(total-1)
for i in range(len(pri)):
print(pri[i])
'알고리즘' 카테고리의 다른 글
[백준] 1697번: 숨바꼭질 (0) | 2022.03.22 |
---|---|
[백준] 2644번: 촌수계산 (0) | 2022.03.22 |
[백준] 7576번: 토마토 (0) | 2022.02.02 |
[백준] 2178번: 미로 탐색 (0) | 2022.01.31 |
[백준] 1260번: DFS와 BFS (0) | 2022.01.30 |