[boj] (g4) 1520 내리막 길

강신현·2022년 4월 21일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

가장 먼저 떠오른건 DFS, BFS이다.
하지만 둘 다 완전탐색이므로 경우의 수를 구하면 MxN이다.
각각 500이하의 자연수이므로 문제 없다고 생각하기 쉽지만, 이동할 수 있는 경우가 상하좌우 4가지 이므로 이점도 생각해줘야 한다.
따라서 정확한 경우의 수는 4xMxN 이다. 최악의 경우 4x500x500 를 모두 탐색해야 한다.

경우의 수를 줄이려면 어떻게 해야할까?
특정 지점까지 올 수 있는 경우를 중복해서 또 연산해줄 필요 없으므로 dp-메모이제이션을 사용한다.

  • 정리
    f(i,j)f(i,j) : i,ji,j까지 올 수 있는 경우의 수
  • 구하는 답
    f(N,M)f(N,M)
  • 초기값
    f(1,1)=1f(1,1)=1
  • 점화식
    (i,j)(i,j)에서 (in,jn)(i_n,j_n)로 이동
    이미 구했던 곳일 경우 : f(i,j)+=f(in,jn)f(i,j) += f(i_n,j_n)
    이미 구하지 않은 곳일 경우 : f(i,j)+=DFS(in,jn)f(i,j) += DFS(i_n,j_n)

2. 코드

3. 시간 복잡도 분석

경우의 수를 모두 구하므로
O(N)O(N)

4. 문제에서 중요한 부분

DP문제는 점화식을 도출하는 것이 중요하다.
Bottm Up(반복문)으로 풀지 Top Down(재귀)으로 풀지는 선택사항

profile
땅콩의 모험 (server)

0개의 댓글

관련 채용 정보