본문 바로가기
백준/실버 1

2667번 - 단지번호붙이기(Python)

by 김주현3902 2025. 1. 23.

풀이

bfs 혹은 dfs를 이용하여 집을 발견하면, 탐색이 끝날 때까지 이동 가능한 집의 개수를 센다.(아래 코드는 dfs)

 

코드

N = int(input())
board = [input() for _ in range(N)]

ans = []
visited = [[False for _ in range(N)] for _ in range(N)]
dy = [0, 0, -1, 1]
dx = [-1, 1, 0, 0]

for i in range(N):
    for j in range(N):
        if not visited[i][j] and board[i][j] == '1':
            stack = [[i, j]]
            cnt = 1
            visited[i][j] = True
            while stack:
                node = stack.pop()
                y, x = node[0], node[1]
                for k in range(4):
                    ny = y + dy[k]
                    nx = x + dx[k]
                    if 0 <= ny < N and 0 <= nx < N and not visited[ny][nx] and board[ny][nx] == '1':
                        cnt += 1
                        visited[ny][nx] = True
                        stack.append([ny, nx])
            ans.append(cnt)

ans.sort()
print(len(ans))
for a in ans:
    print(a)

 

'백준 > 실버 1' 카테고리의 다른 글

2156번 - 포도주 시식(Python)  (0) 2025.01.25
1932번 - 정수 삼각형(Python)  (0) 2025.01.24
1697번 - 숨바꼭질(Python)  (0) 2025.01.24
1149번 - RGB거리  (0) 2025.01.23
2178번 - 미로 탐색(Python)  (0) 2025.01.23