[C++]백준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));