백준 2667번: 단지번호붙이기


[www.acmicpc.net/problem/2667]

#풀이

- dfs,bfs를 사용해서  단지 크기를 측정한다.

1. 이차원 배열안에 1이 있으면 1이 있는 위치 부터 bfs,dfs를 사용한다.

2. 단지갯수와 정렬한 단지 크기를 출력한다.

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
import sys
input = lambda: sys.stdin.readline().rstrip()
#sys.stdin = open('input.txt', 'r')
 
def dfs(i,j):
    stack=[(i,j)]
    data[i][j]=0
    count=1
    while stack:
        a,b=stack.pop()
        for k in range(4):
            da=a+dx[k]
            db=b+dy[k]
            #da,db가 data 범위 안에 있고 data[da][db]를 방문 하지 않았을 때
            if 0<=da<and 0<=db<and data[da][db]:
                data[da][db]=0
                stack.append((da,db))
                count+=1
    result.append(count)
 
#상하좌우
dx=[0,0,1,-1]
dy=[1,-1,0,0]
 
n=int(input())
data=[[int(i) for i in input()] for _ in range(n)]
 
result=[]
 
#모든 경우 탐색
for i in range(n):
    for j in range(n):
        if data[i][j]:
            dfs(i,j)
 
print(len(result))
for i in sorted(result):
    print(i)
cs


댓글 쓰기

Post a Comment (0)

다음 이전