(DFS & BFS) 2667번 단지번호

DARTZ·2022년 4월 14일
0

알고리즘

목록 보기
2/135
import sys

N = int(input())
graph = []
for i in range(N):
    graph.append(list(map(int, input())))

result = 0 # 총 단지 수
num = 0 # 단지의 아파트 수를 담을 변수
answer = [] # 각 단지의 아파트 수를 담을 리스트

def dfs(row, column):

    global num # 전역변수 num을 사용

    if row < 0 or column < 0 or row > N-1 or column > N-1: # 행열에서 주어진 범위를 벗어날 경우 바로 종료
        return False

    if graph[row][column] == 1: # 방문하지 않은 지점이 있다면
        graph[row][column] = 0 # 방문 처리
        dfs(row - 1, column) # 왼쪽
        dfs(row + 1, column) # 오른쪽
        dfs(row, column + 1) # 아래
        dfs(row, column - 1) # 위
		
        num += 1 # 각 지점를 전부 검사하고 아파트가 있을 경우 갯수 추가

        return True # True 리턴

    return False # 0일 경우 종료

for row in range(N):
    for column in range(N):
        if dfs(row, column) == True: # True를 리턴 받았을 경우
            result += 1 # 단지 갯수 추가
            answer.append(num) # 아파트 갯수 answer 리스트에 추가
            num = 0 # 아파트 갯수 초기화

answer.sort() # 오름차순 정렬이므로 정렬
print(result) # 총 단지 수 출력
for a in answer: # 아파트 갯수 차례로 출력
    print(a)
profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글