티스토리 뷰

PS/백준

[백준] 1520 내리막길

HUN 2021. 3. 26. 11:51


지도의 (0, 0) 지점에서 (M-1, N-1)까지 내리막길로 이동할 수 있는 경로의 수를 구하는 문제이다. 다이내믹 프로그래밍을 사용하여 해결 할 수 있다.

 

다이내믹 프로그래밍에는 Bottom-up 방식인 Tabulation 기법과 Top-down 방식인 Memoization 기법이 존재한다. Tabulation 기법은 보통 반복문으로 구현하며, Memoization은 보통 재귀 함수로 구현한다.

 

메모리나 시간 복잡도를 고려하였을 때 Memoization에 비해 Tabulation이 더  효율적이지만 상황에 따라 다르게 적용될 수 있으므로 두 가지 방법 모두 알고있어야 한다.

 

Tabulation 예제

// Tabulated version to find factorial x.
int dp[MAXN];

// base case
int dp[0] = 1;
for (int i = 1; i< =n; i++)
{
    dp[i] = dp[i-1] * i;
}

Memoization 예제

// Memoized version to find factorial x.
// To speed up we store the values
// of calculated states

// initialized to -1
int dp[MAXN]

// return fact x!
int solve(int x)
{
    if (x==0)
        return 1;
    if (dp[x]!=-1)
        return dp[x];
    return (dp[x] = x * solve(x-1));
}

 

내리막길 문제는 Memoization으로 해결할 수 있다.

 

728x90

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

[백준] 1941 소문난 칠공주  (0) 2021.03.29
[백준] 1600 말이 되고픈 원숭이  (0) 2021.03.26
[백준] 1074 Z  (0) 2021.03.16
[백준] 17136 색종이 붙이기  (0) 2021.03.15
[백준] 17143 낚시왕  (0) 2021.03.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함