Potato

 

 

 

  • bfs를 통해 bfs함수를 실행할 떄 마다 카운트를 올리며(단지 수) bfs함수 내에서는 집을 카운트하며(집의 수) 0으로 바꾸는 작업을 진행하였다.

 

from collections import deque

N = int(input())

arr=[list(map(int,input())) for _ in range(N)]
cnt = 0 # 단지의 수
result = [] # 각 단지의 집의 수를 담을 리스트

def bfs(y,x):
    q = deque([(y,x)])
    tmp = 1 
    arr[y][x] = 0

    while q:
        y,x = q.popleft()

        directy = [-1,1,0,0] # 상,하,좌,우로만 이동
        directx = [0,0,-1,1] 

        for k in range(4):
            dy = directy[k] + y
            dx = directx[k] + x

            if dy >= N or dy < 0 or dx >= N or dx < 0: # 목표 인덱스가 배열을 벗어난다면 continue
                continue
            if arr[dy][dx] == 1: 
                tmp += 1 # 상하좌우 내에 집이 있다면 임시변수에 +1
                arr[dy][dx] = 0
                q.append([dy,dx])
    result.append(tmp) # 단지의 집의 수를 result에 저장

for j in range(N):
    for i in range(N):
        if arr[j][i] == 1:
            cnt += 1 # 단지 수 카운트
            bfs(j,i)

print(cnt) # 단지 수 출력
result.sort()

for i in range(len(result)):
    print(result[i]) # 집의 수 출력

 

'Python > 백준' 카테고리의 다른 글

[백준/Python] 2178 미로 탐색  (2) 2022.09.29
[백준/Python] 2606 바이러스  (0) 2022.09.29
[백준/Python] 1697 숨바꼭질  (0) 2022.09.29
[백준/Python] 7576 토마토  (0) 2022.09.29
[백준/Python] 1012 유기농 배추  (0) 2022.09.29

+ Recent posts