본문 바로가기

algorithm/exercise

[BOJ 1937] 백준 1937 욕심쟁이 판다

문제

https://www.acmicpc.net/problem/1937

 

1937번: 욕심쟁이 판다

n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에

www.acmicpc.net

 

풀이

기본 DFS 문제였다.

각 리턴값에 대해서 Max 값 비교 후 더 큰 값을 가지고 있으면 되는 부분이었다.

 

python3

from sys import setrecursionlimit
setrecursionlimit(10**9)

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]


def dfs(x, y, visited, forestMap):
    if visited[x][y]:
        return visited[x][y]

    visited[x][y] = 1
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if 0 <= nx < n and 0 <= ny < n:
            if forestMap[x][y] < forestMap[nx][ny]:
                visited[x][y] = max(visited[x][y], dfs(nx, ny, visited, forestMap) + 1)

    return visited[x][y]


if __name__ == '__main__':
    global n
    n = int(input())
    forestMap = list()
    visited = list()

    for i in range(n):
        row = list(map(int, input().split()))
        forestMap.append(row)
    visited = [[0] * n for _ in range(n)]

    ans = 0
    for i in range(n):
        for j in range(n):
            ans = max(ans, dfs(i, j, visited, forestMap))

    print(ans)

 

아쉬웠던점