(DFS) 백준 1743번 음식물 피하기

DARTZ·2022년 4월 24일
0

알고리즘

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

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

dfs_list = [[0 for i in range(M+1)] for k in range(N+1)]
answer = []

for i in range(K):
    y, x = map(int, input().split())
    dfs_list[y][x] = 1

def solution(column, row):

    global count

    if row >= M+1 or row < 1 or column < 1 or column >= N+1:
        return False

    if dfs_list[column][row] == 0:
        return False

    dfs_list[column][row] = 0

    solution(column+1, row)
    solution(column-1, row)
    solution(column, row+1)
    solution(column, row-1)

    count += 1 # 1인 지점을 만났을 경우 count + 1을 해준다.

    return count

for i in range(1,M+1):
    for k in range(1,N+1):
        count = 0 # count 0을 여기서 초기화
        response = solution(k, i)
        if response != False: # False가 아닌 값이 있을 때만 answer 리스트에 append
            answer.append(response)

print(max(answer)) # answer 리스트에서 최댓값을 반환

백준 1012에서 주어진 조건의 지점의 개수만 구하면 된다.

재귀 함수를 쓰면 recursion 에러가 발생하는데 이번에는

sys.setrecursionlimit(10000)

으로 설정해주었다. 3000은 recursion error가 10**6은 메모리 초과랜다..ㅠㅠ

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

0개의 댓글