Python/BAEKJOON

[백준] 2667번 단지번호붙이기(python)

Magin 2022. 6. 22. 00:19
728x90

문제)

알고리즘)

-그래프의 대표적인 bfs 활용

- bfs탐색을 통해 이어져 있는 단지의 크기와 개수를 출력하는 것

- 방문처리는 1 => 0으로 변환하며 처리 

 

코드)

#단지번호붙이기
import sys

input = sys.stdin.readline

n = int(input())
g = []
size = []

move_x = [-1, 0, 1, 0]
move_y = [0, -1, 0, 1]

for _ in range(n):
    g.append(list(map(int, input().strip())))

def dfs(y,x):
    global cnt #단지별 사이즈
    if x <= -1 or x >= n or y <= -1 or y >= n: #범위밖 조선
        return 0

    if g[y][x] == 1: #확인된 자리
        g[y][x] = 0
        cnt += 1

        for i in range(4):
            dfs(y+move_y[i], x+move_x[i])

        return cnt
    return 0


for a in range(n):
    for b in range(n):
        cnt = 0
        result = dfs(a, b)

        if result != 0:
            size.append(result)

print(len(size)) #단지 갯수
size = sorted(size)  #정렬
for i in size: 
    print(i)
728x90