처음에 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];
}
}
}