하루살이 개발자

[BaekJoon 2667번] 단지번호붙이기 문제(Python) 본문

코딩테스트

[BaekJoon 2667번] 단지번호붙이기 문제(Python)

하루살이 2022. 2. 23. 13:32

단지번호붙이기 문제입니다.

 

문제링크: https://www.acmicpc.net/problem/2667

 

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net

 

 

Code

def dfs(x, y):
    global count
    if x <= -1 or x >= n or y <= -1 or y >= n:  # 주어진 범위를 벗어나는 경우
        return False

    if graph[x][y] == 1:  # 현재 노드를 아직 방문하지 않은 경우
        graph[x][y] = 0  # 방문 처리
        count += 1
        # 동서남북 위치들 모두 재귀적으로 호출
        dfs(x - 1, y)
        dfs(x, y - 1)
        dfs(x + 1, y)
        dfs(x, y + 1)
        return True
    return False

n = int(input()) # 정사각형
num = 0
graph = []

for i in range(n):
    graph.append(list(map(int, input())))

# 단지
num = []
# 각 단지별 수
count = 0
for i in range(n):
    for j in range(n):
        if dfs(i, j) == True:
            # 각 단지마다 count 추가
            num.append(count)
            count = 0

# 단지 개수
print(len(num))
# 오름차순 정렬
num.sort()
for i in range(len(num)):
    print(num[i])