본문 바로가기

알고리즘

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

https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net

이전에 풀었던 문제보다 쉽게 구현이 가능한 문제이다.

bfs탐색을 연습하기 위해 bfs로 구현하였다. dfs로 구현하여도 클리어는 가능한 문제로 보인다.

또한 이번에는 단순 list,pop(0)을 이용하지 않고 deque를 선언하여 구현하였다.

 

from collections import deque

n = int(input())

arr = []
for i in range(n):
    arr.append(list(map(int,input())))

dx, dy = [-1,1,0,0] , [0,0,-1,1]

q = deque()
total = 1
pri = []
for i in range(n):
    for j in range(n):
        if arr[i][j] == 1:
            total += 1
            q.append((i,j))
            arr[i][j] = total
            cnt = 1
            while q:
                x, y = q.popleft()
                for k in range(4):
                    nx = x + dx[k]
                    ny = y + dy[k]

                    if 0 <= nx < n and 0 <= ny < n and arr[nx][ny] == 1:
                        arr[nx][ny] = total
                        cnt += 1
                        q.append((nx,ny))


            pri.append(cnt)

pri.sort()
print(total-1)
for i in range(len(pri)):
    print(pri[i])

'알고리즘' 카테고리의 다른 글

[백준] 1697번: 숨바꼭질  (0) 2022.03.22
[백준] 2644번: 촌수계산  (0) 2022.03.22
[백준] 7576번: 토마토  (0) 2022.02.02
[백준] 2178번: 미로 탐색  (0) 2022.01.31
[백준] 1260번: DFS와 BFS  (0) 2022.01.30