문제
https://www.acmicpc.net/problem/1937
1937번: 욕심쟁이 판다
n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에
www.acmicpc.net
풀이
재귀 & 동적 계획
시작점 지정X -> 각 지점에서 시작할 때 가장 긴 생존 일 구하기
vist : 해당 지점 방문시 최대 생존 일 저장
코드
#문제 : https://www.acmicpc.net/problem/1937
from sys import setrecursionlimit
setrecursionlimit(10**9)
def dfs(i, j):
if visit[i][j] < 0: #해당 지점 한 번도 방문 X
visit[i][j] = 0 #지금 방문함
for d in range(4): #상하좌우 참색
x = i+dx[d]
y = j+dy[d]
if 0<=x<n and 0<=y<n and bamboo[i][j] < bamboo[x][y]:
# 범위 내 & 현재보다 더 많은 대나무 있는 경우
visit[i][j] = max(visit[i][j], dfs(x, y))
#상하좌우 중 가장 긴 생존 일 갱신
visit[i][j] += 1
return visit[i][j]
n = int(input())
bamboo = [list(map(int, input().split())) for _ in range(n)]
visit = [[-1] * n for _ in range(n)]
dx= [-1, 1, 0, 0]
dy=[0, 0, -1, 1]
ans = 0
for i in range(n):
for j in range(n):
ans = max(ans, dfs(i, j))
print(ans)
좋아요공감
공유하기게시글 관리