본문 바로가기
코딩테스트/[백준]단계별로풀어보기(C++)

[백준][브루트포스] 2798번 : 블랙 잭(C++)

by 오리로스 2024. 4. 5.

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

풀이

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    int n,m;
    int i{0},sum{0},tmp{100000},result{0};
    cin >> n >> m;
    vector<int> vec(n,0);
    vector<bool> checker(n,true);
    for(;i<n;++i) cin >> vec[i];
    for(i=0;i<n-3;++i) checker[i]=false;
    do{
        sum=0;
        for(i=0;i<n;++i) if(checker[i]) sum+=vec[i];
        if((tmp >= m-sum) && m >= sum){
            tmp = m-sum;
            result=sum;
        } 
    }while(next_permutation(checker.begin(),checker.end()));
    cout << result << "\n";
    return 0;
}