백준 1520. 내리막 길

2023. 11. 1. 15:54·백준

https://www.acmicpc.net/problem/1520

 

1520번: 내리막 길

첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다.

www.acmicpc.net

def dfs(i, j):
    if i == m - 1 and j == n - 1:  # 도착 지점에 도달
        return 1  # 경우의 수 1

    if dp[i][j] == -1:  # 탐색하지 않은 곳이면?
        dp[i][j] = 0  # 탐색

        for ti, tj in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
            ni, nj = i + ti, j + tj
            if 0 <= ni < m and 0 <= nj < n and arr[i][j] > arr[ni][nj]:
                dp[i][j] += dfs(ni, nj)  # (i,j)부터 도착지점까지 갈 수 있는 경우의 수 업뎃

    # 탐색한 곳이라면? 그 위치에서 출발하는 경우의 수 리턴
    return dp[i][j]


m, n = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(m)]
dp = [[-1] * n for _ in range(m)]
print(dfs(0, 0))

dp를 더 공부해야 될 것 같다...ㅠㅠ 어렵다. 

+ 24.10.24

import sys
sys.setrecursionlimit(10**6)

input = sys.stdin.readline

def recur(y,x):

    if y == m-1 and x == n-1:
        return 1

    # 한번 계산된 값 재사용
    if dp[y][x] != -1:
        return dp[y][x]

    res = 0
    # 동서남북 탐색
    for dy, dx in [[1,0], [-1,0], [0,1], [0,-1]]:
        ny = y + dy
        nx = x + dx

        # 유효한 범위인지 확인
        if 0 <= ny < m and 0 <= nx < n:
            # 이동하려는 곳이 더 작은 경우
            if arr[y][x] > arr[ny][nx]:
                res += recur(ny,nx)

    dp[y][x] = res # 계산된 값을 DP 테이블에 저장 -> 추후 재사용
    return res

m, n = map(int, input().split())
arr = [list(map(int,input().split())) for _ in range(m)]
dp = [[-1]*n for _ in range(m)]

print(recur(0,0))
저작자표시 (새창열림)

'백준' 카테고리의 다른 글

백준 1135. 뉴스 전하기  (0) 2023.11.07
백준 1939. 중량제한  (0) 2023.11.03
백준 4485. 녹색 옷 입은 애가 젤다지?  (0) 2023.10.30
백준 18430. 무기 공학  (0) 2023.10.27
백준 1826. 연료 채우기  (0) 2023.10.25
'백준' 카테고리의 다른 글
  • 백준 1135. 뉴스 전하기
  • 백준 1939. 중량제한
  • 백준 4485. 녹색 옷 입은 애가 젤다지?
  • 백준 18430. 무기 공학
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    항해99
    Til
    개발자취업
    코딩테스트준비
    99클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
백준 1520. 내리막 길
상단으로

티스토리툴바