알고리즘/백준 알고리즘

백준 2798번 블랙잭[C++]

빠켱이 2020. 12. 26. 02:04

2798번은 브루트 포스 문제로써 모든 경우의 수를 다 따지며 비교해 최종적으로 가장 해당 숫자에 가까운 값을 얻어내면 됩니다.

3중 for문으로 i,j,k를 돌며 같은 카드를 고를 수 없으므로 if문안에 조건에 모두 다를 때와 3 카드의 합이 m을 넘지 않는 값 중 m과의 차이가 가장 작은 값을 선택하고, 출력 시 뺄셈을 하기 전 값을 출력해줘야 하므로 원래 값을 출력해줍니다

#include <iostream>
#include <algorithm>
using namespace std;

int n;
int m;
int arr[101];
int main(){
    int value = 100001;
    scanf("%d %d", &n, &m);
    for(int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            for(int k = 0; k < n; k++){
                if(i != j && j != k && k != i && (arr[i] + arr[j] + arr[k]) <= m){
                    value = min(m - (arr[i] + arr[j] + arr[k]), value);
                }
            }
        }
    }
    printf("%d", m - value);
    return 0;
}