코딩테스트/백준
[파이썬]2667_단지번호붙이기_S1.py
sunNprize
2022. 4. 19. 22:00
"""
*packageName :
* fileName : 2667_단지번호붙이기_S1
* author : ipeac
* date : 2022-04-19
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2022-04-19 ipeac 최초 생성
"""
from collections import deque
res = []
dx = [0, 1, -1, 0]
dy = [1, 0, 0, -1]
n = int(input())
graph = [list(map(int, input())) for _ in range(n)]
def bfs(a, b):
queue = deque()
# 초기
queue.append((a, b))
# 초기방문지점 방문처리
graph[a][b] = 0
count = 1
while queue:
x, y = queue.popleft()
if x < 0 or y < 0 or x >= n or y >= n:
break
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if graph[nx][ny] == 1:
graph[nx][ny] = 0
queue.append((nx, ny))
count += 1
return count
for i in range(n):
for j in range(n):
if graph[i][j] == 1:
res.append(bfs(i, j))
print(len(res))
res.sort()
for num in res:
print(num)
- BFS