
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
from collections import deque
n = int(input())
apt = [list(map(int,input())) for _ in range(n)]
def bfs(x,y):
queue = deque()
queue.append((x,y))
apt[x][y] = 0
cnt = 1
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while queue:
x,y = queue.popleft()
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if nx >= n or ny >= n or ny<0 or nx<0:
continue
if apt[nx][ny] == 1:
cnt += 1
apt[nx][ny] = 0
queue.append((nx,ny))
return cnt
ans = []
for i in range(n):
for j in range(n):
if apt[i][j] == 1:
k = bfs(i,j)
ans.append(k)
ans.sort()
print(len(ans),*ans,sep='\n')
# 반례 : 집이 하나인 경우는?
# 4
# 1000
# 0000
# 0111
# 0001
'Algorithm' 카테고리의 다른 글
[백준 #16234 파이썬] 인구 이동 (0) | 2022.12.19 |
---|---|
[백준 #2178 파이썬] 미로 탐색 (0) | 2022.10.08 |
[백준 #1260 파이썬] DFS BFS (0) | 2022.07.25 |
[백준 #1747 파이썬] 재귀, 완전탐색 (0) | 2022.07.20 |
[백준 #10974 파이썬] 모든 순열 (0) | 2022.07.17 |