Lewis's Tech Keep

[백준] 합분해 - 실패 본문

Java/알고리즘

[백준] 합분해 - 실패

Lewis Seo 2021. 3. 31. 22:17

참고 : www.acmicpc.net/problem/2225

 

2225번: 합분해

첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

- dp 문제

- dp[i][j] : i를 구하기 위해 필요한 j 횟수 (0~i 까지 숫자를 이용)

 

- dp 로 해야했으나 recursive하게 backtracking 으로 접근 : 실패

 

더보기
import java.io.*;
import java.util.*;

public class Solution {

    private static int n, m;
    private static int[] arr;
    private static boolean[] isUsed;
    private static int count = 0;
    private static int MOD = 1_000_000_000;

    private static void bt(int k) {
        if(k == m) {
            int sum = 0;
            for (int i = 0; i < m; i++) {
//                System.out.print(arr[i] + " ");
                sum += arr[i];
            }
//            System.out.println();
            if(sum == n) {
//                System.out.println(sum);
                count++;
            }
            return;
        }
        for (int i = 0; i <= n; i++) {
//            if(!isUsed[i]) {
                arr[k] = i;
//                isUsed[i] = true;
                bt(k+1); // 뎁스 1 증가
//                isUsed[i] = false;
//            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        arr = new int[202];
        isUsed = new boolean[202];
        bt(0);
        System.out.println(count%MOD);
    }
}

'Java > 알고리즘' 카테고리의 다른 글

[백준] 상자넣기  (0) 2021.04.02
[백준] 합분해  (0) 2021.03.31
[백준] 점프  (0) 2021.03.30
[백준] 점프 - 실패  (0) 2021.03.30
[백준] 내리막 길  (0) 2021.03.30
Comments