본문 바로가기

Algorithm/BOJ

[BOJ] 1182 부분수열의 합

부분 수열 합이 S가 되었다고 해도 끝까지 확인을 해보면 또 다시 S가 나올 수 있다. 

처음에 S가 0일 경우가 있을 수도 있다. 따라서 합을 레이어가 시작할 때 구한다. 

#include <iostream>
#define MAXN 20
using namespace std;

int N, S, cnt =0 ;
long long A[MAXN];

void input(){
    cin >> N >> S;
    int i = 0;
    while(i < N)
        cin >> A[i++];
}
void solve(long long sum , int index){
    sum += A[index];
    if(index >= N)
        return;

    if(sum == S )
        cnt++;

    solve( sum -A[index], index+1);

    solve(sum, index+1);


}
int main() {

    input();
    solve(0,0);

    cout << cnt << endl;
    return 0;
}

 

 

 

 

백준 1182번 부분집합의 합

문제 링크입니다: https://www.acmicpc.net/problem/1182 부분집합의 합을 구할 때 해당 인덱스에 있는 숫자를 더하는 경우가 있고 안 더하는 경우가 있는데 이를 모두 고려해준다면 쉽게 답을 구할 수 있

jaimemin.tistory.com

 

백준 1182번 - 부분수열의 합 (python)

https://www.acmicpc.net/problem/1182 완전정복 문제들을 보다보면 숫자의 순서를 고려하는 경우가 있고(...

blog.naver.com

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1535 안녕  (0) 2021.05.24
[BOJ] 1261 알고스팟  (0) 2021.05.21
[BOJ] 6603 로또  (0) 2021.05.15
[BOJ] 11057 오르막 수  (0) 2021.05.10
[BOJ] 2011 암호코드  (0) 2021.04.26