본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 11051 이항 계수 2

by 까망 하르방 2021. 2. 23.
반응형

출처: https://www.acmicpc.net/problem/11051

 Input 
5 2

 Output 

10 

 

[BOJ] 11050 이항 계수 1 문제처럼 재귀방식으로 접근하면 시간제한이 걸립니다.

 

[BOJ] 백준 11050 이항 계수 1

출처: https://www.acmicpc.net/problem/11050  Input 5 2  Output ※ 이항 계수(binomial coefficient)는 n개의 서로 다른 원소 중에서 r개의 원소를 순서없이 골라내는 방법의 수 다음과 같은 점화식이 존재..

zoosso.tistory.com

불필요하게 재귀호출되는 bino(n, k)를 DP 방식으로 처리

 

 

[Bottom-up 방식]

import java.util.Scanner;
 
public class Main{
    static final int DIVIDER = 10007;
    static int[][] cache;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.next());
        int K = Integer.parseInt(sc.next());
         
        // 인덱스를 '1'부터 하기 위함
        cache = new int[N+1][K+1];
        for(int i=1; i<=N; i++) {
            for(int j=0; j<=K; j++) {
                if(i == j || j == 0) {
                    cache[i][j] = 1;
                }else {
                    cache[i][j] = cache[i-1][j] + cache[i-1][j-1];
                    cache[i][j] %= DIVIDER;
                }
            }
        }
         
        System.out.println(cache[N][K]);
    }    
}

import java.util.Scanner;
 
public class Main{
    static final int DIVIDER = 10007;
    static int[][] cache;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.next());
        int K = Integer.parseInt(sc.next());
         
        // 인덱스를 '1'부터 하기 위함
        cache = new int[N+1][K+1];
         
        System.out.println(bino(N,K));
    }
 
    private static int bino(int n, int k) {
        if(n == k || k == 0) {
            return 1;
        }
         
        // 메모이제이션 기법 사용
        if(cache[n][k] != 0) {
            // 값이 저장되어 있다면 재귀호출을 하지않고 저장된 값을 반환
            return cache[n][k];
        }
         
        // 저장되어 있지 않으면 재귀호출을 하지만 중복계산은 없다.
        cache[n][k] = bino(n-1,k) + bino(n-1,k-1);
         
        return cache[n][k] % DIVIDER;
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 11048 이동하기  (0) 2021.02.23
[BOJ] 백준 1890 점프  (0) 2021.02.23
[BOJ] 백준 11050 이항 계수 1  (0) 2021.02.23
[BOJ] 백준 1932 정수 삼각형  (0) 2021.02.23
[BOJ] 백준 2947 나무 조각  (0) 2021.02.23

댓글