[C++]백준2798 블랙잭

[C++]백준2798 블랙잭

백준2798 블랙잭 링크

문제

문제

예제 입력

예제


코드

#include<iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, m;
    cin >> n >> m;

    int arr[100];
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
 
    int res = 0, val;
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            for (int k = j+1; k < n; k++) {
                val = arr[i] + arr[j] + arr[k];
                if (m >= val && res < val)
                    res = val;
            }
        }
    }
    cout << res;
}

설명

기본적으로 C/C++의 기본 입출력함수를 혼합하여 사용되게 만들었지만 그만큼 실행속도에서 차이가 생기기 때문에 설정을 해주며 입력을 받고 n장의 카드중 3장을 뽑아야하는데 노멀한 방식인 for문을 통해서 각 카드를 뽑았다고 생각했을때 계산되는 값을 차근차근 모두 확인하여 가장 가까운 값을 출력합니다.
처음에는 조합을 통해 구현하고자 생각했습니다.

    int idx[100];
    for (int i = 0; i < n; i++) {
        if (i > 2)
            idx[i] = 0;
        else
            idx[i] = 1;
    }
    //sort(idx, idx + n); // next_permutation일때

    do {
        val = 0;
        for (int i = 0; i < n; i++) {
            if (idx[i] == 1)
                val += arr[i];
        }

        if (m >= val && res < val)
            res = val;

    } while (prev_permutation(idx, idx+n));

결과

결과


© 2022. All rights reserved. 신동민의 블로그