[백준](Java) 1182 - 부분수열의 합

민지킴·2021년 8월 23일
0

백준

목록 보기
47/48
post-thumbnail

문제 링크

https://www.acmicpc.net/problem/1182

문제 풀이

처음에 dp 인줄 알고 어떻게 풀지 고민하다가 dfs라고 깨닫고 바로 풀수 있었다.
현재 idx 보다 무조건 뒤에 있는 배열만 탐색하므로 chk 같은 플래그를 사용하지 않고 문제를 풀 수 있었다.

dfs를 나오게 되면 이미 더했던 값을 빼줘야한다.

for(int i=idx+1; i<arr.length; i++){
            sum += arr[i];
            dfs(arr,i,sum,s);
            sum -=arr[i];
        }

코드

import java.util.*;

public class Main {

    static int answer =0;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int s = sc.nextInt();


        int [] arr = new int[n];
        for(int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }
        for(int i=0; i<n; i++){
            dfs(arr, i,arr[i], s);
        }

        System.out.println(answer);
    }

    public static void dfs(int [] arr, int idx, int sum, int s){

        if(idx>=arr.length){
            return;
        }

        if(sum==s){
            answer++;
        }

        for(int i=idx+1; i<arr.length; i++){
            sum += arr[i];
            dfs(arr,i,sum,s);
            sum -=arr[i];
        }


    }
}

profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글