해당 문제는 일반적인 그래프 문제로
방문 여부에 대한 체크를 하며 카운팅을 해 푼 풀이법
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
arr = [list(map(int,input().strip('\n'))) for _ in range(n)]
visit = [[0]*n for _ in range(n)]
stack = deque([])
result = []
r_cnt = 0
for i in range(n):
for j in range(n):
if arr[i][j] and not visit[i][j]:
cnt, r_cnt = 1, r_cnt + 1
visit[i][j] = 1
stack.append([i,j])
while stack:
x,y = stack.pop()
for a,b in [[-1,0],[1,0],[0,-1],[0,1]]:
dx,dy = x+a, y+b
if 0<=dx<n and 0<=dy<n and arr[dx][dy] and not visit[dx][dy]:
cnt +=1
visit[dx][dy] = 1
stack.append([dx,dy])
result.append(cnt)
print(r_cnt)
[print(i) for i in sorted(result)]
'알고리즘' 카테고리의 다른 글
[백준, 1697번] 숨바꼭질 (0) | 2023.08.15 |
---|---|
[백준, 7576번] 토마토 (0) | 2023.08.14 |
[백준, 2606번] 바이러스 (0) | 2023.08.13 |
[백준, 2178번] 미로 탐색 (0) | 2023.08.13 |
[백준, 12865번] 평범한 배낭 - 냅색 알고리즘 (0) | 2023.08.11 |