백준
[백준] 2667 단지 번호 붙이기 [Python, 파이썬]
YoonJuHan
2023. 10. 15. 22:02
- 문제 : https://www.acmicpc.net/problem/2667
- 🔑 BFS
- 지도를 돌면서 1을 만나면 bfs 실행한다.
- 방문했으면 지도에 1을 0으로 바꾼다.
- 이때 집의 수도 같이 센다.
- 연결된 단지를 모두 탐색했으면 bfs 종료되고 단지 수를 올린다.
from collections import deque
n = int(input())
danji = [list(map(int, input())) for _ in range(n)]
total_danji = 0
danji_list = []
def bfs(i, j):
mx, my = [0, 0, 1, -1], [1, -1, 0, 0]
q = deque([(i, j)])
danji[i][j] = 0
cnt = 1
while q:
x, y = q.popleft()
for m in range(4):
nx, ny = x + mx[m], y + my[m]
if 0 <= nx < n and 0 <= ny < n and danji[nx][ny] == 1:
q.append((nx, ny))
danji[nx][ny] = 0
cnt += 1
return cnt
for i in range(n):
for j in range(n):
if danji[i][j] == 1:
danji_list.append(bfs(i, j))
total_danji += 1
danji_list.sort()
print(total_danji)
for i in danji_list: print(i)