BOJ - 2667. 단지 번호 붙이기

jjiani·2021년 4월 11일
0

Baekjoon

목록 보기
15/16

문제 링크

import sys

def dfs(r, c):
    global count
    visited[r][c] = 1
    for i in range(4):
        nr = r + dx[i]
        nc = c + dy[i]
        if 0 <= nr < N and 0 <= nc < N:
            if apart[nr][nc] == '1' and visited[nr][nc] == 0:
                visited[nr][nc] = 1
                count += 1
                dfs(nr, nc)
    return count

# 연결되어있고 그 연결이 끝나면 한 동
# 연결되어있는 집의 수 세기

N = int(sys.stdin.readline())
apart = [list(sys.stdin.readline()) for _ in range(N)]
visited = [[0]*N for _ in range(N)]

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 1있는곳찾기
count = 0
result = []
for i in range(N):
    for j in range(N):
        # 아파트가 있고 방문하지 않았다면
        if apart[i][j] == '1' and visited[i][j] == 0:
            # dfs로 연결된 아파트 찾기
            block = dfs(i, j)
            result.append(block)
            count = 0
print(len(result))
for i in sorted(result):
    print(i+1)

따로 떨어져 있는 아파트를 어떻게 찾고 어떻게 초기화할지 몰라서 고민했다.
오래 고민하는것보다 답을 본뒤 어떻게 푸는지 이해하고 다음에 비슷한 문제에 또 적용할 수 있는 것이 더 중요할 것 같다!

profile
¡Bienvenido a mi velog!🐣

0개의 댓글