기타/코딩테스트

(코테) 백준_1182_부분수열의 합 백트레킹

불광동 물주먹 2025. 5. 16. 10:16

 

 

 

내가 제출한 답

 

package test;

import java.util.*;
import java.io.*;

public class testest {
    static int n, s, result = 0;
    static int[] list;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        s = Integer.parseInt(st.nextToken());
        
        list = new int[n];
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n; i++) {
            list[i] = Integer.parseInt(st.nextToken());
        }

        dfs(0, 0);

        // 공집합 제외
        if (s == 0) result--;

        System.out.println(result);
    }
    // n=5 , s =0 
    static void dfs(int index, int sum) {
        if (index == n) {
            if (sum == s) {
                result++;
            }
            return;
        }

        // 현재 원소를 선택하는 경우
        dfs(index + 1, sum + list[index]);

        // 현재 원소를 선택하지 않는 경우
        dfs(index + 1, sum);
    }
}

 

 

 

 

회고.

dfs()를 두번 사용하여 , 선택함 선택 안함을 구현하는게 참신했따.....

백트레킹이 처음에 가장 어려웠지만 점점 더 이해가 생기고 있는거 같다....

지치지말고 화이팅..!