(DFS) 백준 1012번 유기농 배추

DARTZ·2022년 4월 24일
0

알고리즘

목록 보기
15/135
import sys
sys.setrecursionlimit(3000)
input = sys.stdin.readline

num = int(input())

for _ in range(num):

    M, N, K = map(int, input().split())

    dfs_list = [[0 for i in range(N)] for k in range(M)] # 새로가 N이고 가로가 M인 테이블의 배열 초기화이다. 0으로 초기화 해준다.

    count = 0

    for j in range(K):
        x, y = map(int, input().split())
        dfs_list[x][y] = 1 # 주어진 조건의 지점에는 1로 초기화 해준다.

    def solution(row, column):

        if row >= M or row < 0 or column < 0 or column >= N: # 주어진 값이 범위를 벗어나면 즉시 종료
            return False

        if dfs_list[row][column] == 0: # 주어진 지점이 0일 경우 종료
            return False

        dfs_list[row][column] = 0 # 방문했으므로 0입력

		# 동서남북을 돌면서 1로 되어 있는 모든지점 방문하고 0으로 바꿔준다.
        solution(row+1, column)
        solution(row-1, column)
        solution(row, column+1)
        solution(row, column-1)

        return 1 # 1을 리턴하면 근처에 있는 1인 지점을 전부 방문했으므로 종료

	# 모든 지점을 돌면서 수행
    for i in range(M):
        for k in range(N):
            response = solution(i, k)
            if response == 1:
                count += 1

    print(count)

처음에 recursion error가 발생해서

sys.setrecursionlimit(10**6)

을 해줬는데 다시 메모리 초과 오류가 발생해서

sys.setrecursionlimit(3000)

으로 해줬더니 해결 되었다. DFS로 푸는 것 보다. BFS로 푸는게 나아보인다.

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

0개의 댓글