본문 바로가기
Algorithm/BOJ

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

by sun_HY 2022. 4. 10.

백준 2667: 단지번호붙이기 (파이썬)

 

 

2667번: 단지번호붙이기

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

www.acmicpc.net

 

# [BOJ] 2667. 단지 번호 붙이기  2022-04-09

def bfs(a, b, n):
    q = []
    q.append([a, b])
    visited[a][b] = 1
    arr[a][b] = n
    cnt = 1     # 단지 수

    while q:
        i, j = q.pop(0)
        for di, dj in [[1, 0], [0, 1], [-1, 0], [0, -1]]:
            ni, nj = i + di, j + dj
            if 0 <= ni < N and 0 <= nj < N and arr[ni][nj] == 1 and visited[ni][nj] == 0:
                q.append([ni, nj])
                arr[ni][nj] = n
                visited[ni][nj] = 1
                cnt += 1
    R.append(cnt)   # 완료되면 단지 수 저장


N = int(input())
arr = [list(map(int, input())) for _ in range(N)]

visited = [[0] * N for _ in range(N)]
num = 0     # 단지 번호
R = []   # 단지 수 저장할 리스트

for i in range(N):
    for j in range(N):
        if arr[i][j] == 1 and visited[i][j] == 0:
            num += 1    # 단지 번호 1 증가
            bfs(i, j, num)

R.sort()
print(num)
for i in range(len(R)):
    print(R[i])

 

728x90

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1065 한수 (python)  (0) 2022.04.20
[BOJ] 1978 소수 찾기 (python)  (0) 2022.04.18
[BOJ] 2577 숫자의 개수 (python)  (0) 2022.04.14
[BOJ] 1244 스위치 켜고 끄기 (python)  (0) 2022.04.13
[BOJ] 2606 바이러스 (python)  (0) 2022.04.09