https://www.acmicpc.net/problem/1937
import sys
sys.setrecursionlimit(10**6)
def recur(y,x):
# 한번 계산된 값 재사용
if dp[y][x] != -1:
return dp[y][x]
# 동서남북 탐색
for dy, dx in [[1,0], [-1,0], [0,1], [0,-1]]:
ny = y + dy
nx = x + dx
# 유효한 범위인지 확인
if 0 <= ny < n and 0 <= nx < n:
# 이동하려는 곳이 더 큰 경우
if arr[y][x] < arr[ny][nx]:
# 깊게 들어갈수록 +1
dp[y][x] = max(dp[y][x], recur(ny,nx) + 1) # 이미 다른 경로에서 계산된 값이 있을 수 있으므로 비교해주기
return dp[y][x] # 해당 위치에서 이동한 칸의 수
n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
dp = [[-1]*n for _ in range(n)]
for y in range(n):
for x in range(n):
recur(y,x)
print(max(map(max, dp))+1) # 2차원 배열에서 최댓값 찾는 공식
# 첫 방문한 칸도 포함시켜야 하므로 1 더해주기
'백준' 카테고리의 다른 글
백준 9251. LCS (0) | 2024.10.26 |
---|---|
백준 11053. 가장 증가하는 부분 수열 (0) | 2024.10.26 |
백준 14501. 퇴사 (0) | 2024.10.23 |
백준 12865. 평범한 배낭 (0) | 2024.10.23 |
백준 2961. 도영이가 만든 맛있는 음식 (0) | 2024.10.20 |