Profile picture

10cheon00의 Archive

백준 24723

July 10, 2023

24723 녹색거탑

바닥까지 내려오는 경로의 개수를 구하는 문제다.

먼저 A지점에서 B지점까지 최단 거리로 가는 길의 개수를 구하는 방법을 생각했었다.

그 방법을 생각하니 곧바로 조합론이 떠올랐고, 문제에서 제시한 박스 모형이 파스칼 삼각형을 의미함을 깨달았다.

즉, nC0_nC_0부터 nCn_nC_n까지 모두 더하면 된다.

여기서 예전에 배웠던 수학공식을 조금 활용하면 dp를 적용할 수 있다.

nCr=n1Cr1+n1Cr_nC_r = _{n-1}C_{r-1} + _{n-1}C_r

위 식을 통해 이전에 계산한 값을 또 다시 계산하지 않고 메모이제이션해오면 된다.

내 제출

Copy
#include <stdio.h>
int dp[6][6]={0};
int comb(int n, int r){
    // return nCr
    if(r==0 || r==n){
        return 1;
    }
    if(r==1 || r==n-1){
        return n;
    }
    if(dp[n][r]==0){
        dp[n][r] = dp(n-1,r) + dp(n-1,r-1);    
    }
    return dp[n][r];
}
int main(){
    int N;
    scanf("%d", &N);
    int sum = 0;
    for(int i=0; i<=N; i++){
        sum += comb(N, i);
    }
    printf("%d", sum);
}

브론즈 2문제여서 그런지 1N51\leq N \leq 5여서 dp의 효과가 딱히 있진 않은것 같다.

solved


Loading script...