분석
입력
출력
판다가 이동할 수 있는 칸의 수 최댓값
틀린 풀이...
from collections import deque
N = int(input())
A = [list(map(int, input().split())) for _ in range(N)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(x, y):
visited = set()
queue = deque()
queue.append((x, y))
visited.add((x, y))
count = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N and (nx, ny) not in visited:
if A[nx][ny]-1 > A[x][y]:
A[x][y] -= 1
visited.add((nx, ny))
queue.append((nx, ny))
count += 1
A[nx][ny] -= 1
return count
max_count = 0
for i in range(N):
for j in range(N):
max_count = max(max_count, bfs(i, j))
print(max_count)
다른 블로그를 찾아보다가
dp + dfs로 풀어야 한다는 걸 알았다...
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
N = int(input())
A = [list(map(int, input().split())) for _ in range(N)]
dp = [[-1] * N for _ in range(N)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
answer = 0
def dfs(x,y):
if dp[x][y] == -1:
dp[x][y] = 0
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N and A[nx][ny] > A[x][y]:
dp[x][y] = max(dp[x][y], dfs(nx,ny))
return dp[x][y] + 1
for i in range(N):
for j in range(N):
answer = max(answer, dfs(i,j))
print(answer)
sys.setrecursionlimit(10**6) 없이 처음 제출했을 때는 런타임에러가 났다...