(DFS) 백준 2667번 단지번호붙이기

DARTZ·2022년 4월 25일
0

알고리즘

목록 보기
17/135
import sys
sys.stdin =open('in.txt','rt')
sys.setrecursionlimit(10**6)
n = int(input())

dfs_list = []
answer = []

for _ in range(n):
    dfs_list.append(list(map(int, input())))

def dfs(x,y):
    global count

    if x >= n or x < 0 or y >= n or y < 0:
        return False

    if dfs_list[x][y] == 0:
        return False

    dfs_list[x][y] = 0

    count += 1

    dfs(x+1, y)
    dfs(x-1, y)
    dfs(x, y+1)
    dfs(x, y-1)

    return count


for i in range(n):
    for k in range(n):
        count = 0
        response = dfs(i,k)

        if response != False:
            answer.append(response)

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

예전에 한번 풀었던 문제이다.

백준 1012 유기농 배추와 1743번 음식물 피하기 문제를 합쳐놓은 문제이다.
다만, 오름차순으로 정렬해서 출력해야하기 때문에 영역의 1의 합을 answer 리스트에 저장해놓았다가 정렬하고 출력한다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글