🖥️ CS/Baekjoon Algorithms

#14225번 부분수열의 합 (C++)

한국의 메타몽 2021. 2. 24. 03:28

문제 링크 : www.acmicpc.net/problem/14225

 

14225번: 부분수열의 합

수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들

www.acmicpc.net

백준 1182번 보다는 약간 업그레이드 된 문제이다. 

하지만 로직은 1182번과 동일하다. 결국 bool문을 통한 계수정렬의 방식으로 접근하면 된다.

 

#include <iostream>
using namespace std;

int arr[21] = {0,}, n = 0;
bool ch[20*100000+1] = {false,};

void dfs(int index, int num){
    if(index>n) return;
    ch[num] = true;
    dfs(index+1, num+arr[index]);
    dfs(index+1, num);
}

int main(void) {
    cin >> n;
    for(int i=0; i<n; i++) cin >> arr[i];
    dfs(0,0);
    for(int s=0; s<20*100000+1; s++){
        if(!ch[s]){
            cout << s << "\n";
            break;
        }
    }
   return 0;
}

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#3085번 사탕 게임 (C++)  (0) 2021.03.03
#14500번 테트로미노 (C++)  (0) 2021.03.02
#1182번 부분수열의 합 (C++)  (0) 2021.02.24
#17427번 약수의 합2 (C++)  (0) 2021.02.24
#4375번 1 (C++)  (0) 2021.02.23