알고리즘/BOJ

백준 1182번 부분집합의 합

꾸준함. 2018. 6. 16. 13:57

문제 링크입니다: https://www.acmicpc.net/problem/1182


부분집합의 합을 구할 때 해당 인덱스에 있는 숫자를 더하는 경우가 있고 안 더하는 경우가 있는데 이를 모두 고려해준다면 쉽게 답을 구할 수 있는 문제였습니다.

개인적으로 종만북에 나온 코드들에 익숙해져 반복문보다는 재귀호출이 더 쉽게 느껴지네요.


#include <iostream>

using namespace std;

 

const int MAX = 20;

 

int N, S;

int arr[MAX];

int result = 0;

 

void numOfSubset(int idx, int sum)

{

        sum += arr[idx]; //우선 해당 숫자를 더한다

 

        //기저사례: 범위 초과시

        if (idx >= N)

                 return;

        //조건 성립시

        if (sum == S)

                 result++;

 

        //해당 숫자를 안 더했을 경우

        numOfSubset(idx + 1, sum - arr[idx]);

        //해당 숫자를 더헀을 경우

        numOfSubset(idx + 1, sum);

}

 

int main(void)

{

        cin >> N >> S;

 

        for (int i = 0; i < N; i++)

                 cin >> arr[i];

 

        numOfSubset(0, 0);

 

        cout << result << endl;

        return 0;

}

 


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

백준 15721번 번데기  (0) 2018.06.17
백준 1256번 사전  (0) 2018.06.17
백준 2309번 일곱난쟁이  (2) 2018.06.16
백준 15720번 카우버거  (0) 2018.06.15
백준 1916번 최소비용 구하기  (0) 2018.06.15