알고리즘
[BOJ/백준] 2798번 - 블랙잭
lewns2
2021. 6. 21. 17:03
단계별로 풀어보기 > 브루트포스 > [1단계] 2798번
문제 링크 : https://www.acmicpc.net/problem/2798
문제 요약
1. 3장을 고른다.
2. 3장의 합을 구한다.
3. 주어진 M을 넘지 않는 최대값을 구한다.
입력 복사
예제 입력 1 >> 출력 : 21
5 21
5 6 7 8 9
예제 입력 2 >> 출력 : 497
10 500
93 181 245 214 315 36 185 138 216 295
CODE
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> v;
int num[n];
int sum;
for(int i = 0; i < n; i++)
cin >> num[i];
for(int i = 0; i < n; i++) {
for(int j = i+1; j < n; j++) {
for(int k = j+1; k < n; k++) {
sum = num[i]+num[j]+num[k];
if(sum <= m) {
v.push_back(sum);
}
}
}
}
sort(v.begin(), v.end());
cout << v.back() << endl;
}
문제 풀이
1. 삼중 for문을 활용하여 3장의 카드를 고른다.
2. 합(sum)이 M보다 작다면 벡터에 집어 넣는다.
3. 벡터를 오름차순 한 뒤, 가장 뒤의 수(최댓값)를 출력한다.
728x90
반응형