알고리즘

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

hminor 2023. 8. 14. 10:06

해당 문제는 일반적인 그래프 문제로
 방문 여부에 대한 체크를 하며 카운팅을 해 푼 풀이법

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