ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1937. [Python]욕심쟁이 판다
    Python_알고리즘/Gold III 2024. 9. 20. 18:36

    1. 문제

     

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 256MB
    • 재귀
    • 깊이우선 탐색
    • DP

     

    3. 파이썬 코드

     

    import sys
    # 재귀 제한
    sys.setrecursionlimit(10000)
    # DFS 실행
    def DFS(start):
        global max_value
        global N
        # 온 경로가 방문한 곳일 경우
        if visited[start[0]][start[1]] != 0:
            # 현재 돌아온 경로를 리턴
            return visited[start[0]][start[1]]
        # 시작 값 1로 초기화
        visited[start[0]][start[1]] = 1
        for k in range(4):
            ny = direction[k][0] + start[0]
            nx = direction[k][1] + start[1]
            # 범위 내에 있는 경우
            if 0 <= ny < N and 0 <= nx < N:
                # 다음 가야할 값이 현재 값보다 작은 경우
                if matrix[ny][nx] < matrix[start[0]][start[1]]:
                    # 재귀 실행 하며 현재 값이랑 재귀해서 돌아온 값 + 1 한 값을 갱신
                    visited[start[0]][start[1]] = max(visited[start[0]][start[1]],DFS((ny,nx))+1)
        # 최종적으로 갱신된 현재 위치값 반환
        return visited[start[0]][start[1]]
    
    
    input = sys.stdin.readline
    
    N = int(input())
    
    direction = [(0,-1),(-1,0),(0,1),(1,0)]
    
    matrix = []
    max_value = 0
    visited = [[0] * (N) for _ in range(N) ]
    
    for _ in range(N):
        matrix.append(list(map(int,input().split())))
    
    for i in range(N):
        for j in range(N):
            # 방문하지 않았을 경우 DFS 실행
            if visited[i][j] == 0:
                max_value = max(max_value,DFS((i,j)))
    
    print(max_value)

     

    4. 문제를 풀고난 후 생각

     

    • 처음 접근 한 방식은 현재 위치에서 큰 값이 있는경우 이동하며 그 위치를 갱신해주는 방식으로 접근을 진행함
    • 그러다 보니 결국 새로운 값이 갱신될 경우 그 주위 값들도 모두 갱신됐기 때문에 시간초과가 발생함
    • 새로 접근한 방식으로는 현재 위치에서 어디까지 최대 갈 수 있는지를 파악하는 것으로 해결함
    • 현재 위치에서 어느 깊이까지 갈 수 있는지 재귀를 통해 접근한 후 초기로 설정한 0 이 아닌 경우 이미 탐색을 했기 때문에 접근하지 않고 바로 return 처리될 수 있도록 함
    • return + 1 한 값이랑 현재 위치값 중 max 값을 계속해서 갱신해줌

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 깊이 우선 탐색
    • 재귀
    • DP

    'Python_알고리즘 > Gold III' 카테고리의 다른 글

    16235. [Python]나무 재테크  (10) 2024.09.27
    1520. [Python]내리막길  (0) 2024.09.24
    16724. [Python]피리 부는 사나이  (0) 2024.07.09
    1695. [Python]팰린드롬 만들기  (0) 2024.07.04
    17299. [Python] 오등큰수  (0) 2023.09.01

    댓글

Designed by Tistory.