본문 바로가기

프로그래밍

[백준 2667 파이썬] 단지번호붙이기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 1. bfs
# 2. Python 60 ms
 
dx = [1,0,-1,0]
dy = [0,1,0,-1]
 
def bfs(start):
    queue =[start]
    length = 1
    board[start[0]][start[1]]='2'
 
    while queue:
        point = queue.pop()
        for i in range(4):
            nx= dx[i]+point[0]
            ny= dy[i]+point[1]
            if 0<=nx and nx<and 0<=ny and ny<and board[nx][ny]=='1':
                board[nx][ny]='2'
                queue.append((nx,ny))
                length +=1
    return length
 
 
 
= int(input())
board = [list(input()) for i in range(n)]
length_list = []
for i in range(n):
    for j in range(n):
        if board[i][j] == '1':      # 1에서 bfs 시작
            v = bfs((i, j))
            length_list.append(v)
 
length_list.sort()      # 길이 정렬
 
print(len(length_list))
for i in length_list:
    print(i)