반응형
문제 설명
입출력 예제
풀이 코드
어느 지점에서 출발해야 최대한 많은 칸을 지날 수 있는지를 찾아야 하기 때문에
각 지점별로 dfs로 재귀적으로 탐색하며 해당 위치에서 얼만큼 이동할 수 있는가를 dp에 저장한다.
답은 최대한 많은 칸을 이동해야하므로 가장 많은 칸을 이동할 수 있는 칸수를 dp에 저장된 값을 통해 반환한다.
정답 코드
import sys
sys.setrecursionlimit(10 ** 8)
input = sys.stdin.readline
n = int(input())
forest = [list(map(int, input().split())) for _ in range(n)]
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
def dfs(x, y):
if dp[x][y] != 0: # 이미 한번 지난 경로일 경우 해당 지점의 dp값부터 시작
return dp[x][y]
dp[x][y] = 1 # 방문 체크
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < n and forest[nx][ny] > forest[x][y]:
dp[x][y] = max(dp[x][y], dfs(nx, ny) + 1) # 재귀가 끝나는 지점으로 이동할 수 있는 칸 개수 초기화
return dp[x][y]
cnt = 0
dp = [[0] * n for _ in range(n)] # 해당 위치에서 이동할 수 있는 칸의 개수를 저장
for x in range(n):
for y in range(n):
if dp[x][y] == 0:
cnt = max(cnt, dfs(x, y))
print(cnt)
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 14502 연구소 - (BFS + 백트래킹) (0) | 2023.05.22 |
---|---|
[Python/파이썬] 백준 7576 - 토마토 (0) | 2023.05.21 |
[Python/파이썬] 백준 9466 - 텀 프로젝트 (0) | 2023.05.18 |
[Python/파이썬] 백준 1068 - 트리 (0) | 2023.05.18 |
[Python/파이썬] 백준 1167 - 트리의 지름 (DFS / BFS) (0) | 2023.05.17 |