본문 바로가기
알고리즘

[BOJ/백준] 2798번 - 블랙잭

by lewns2 2021. 6. 21.

단계별로 풀어보기 > 브루트포스 > [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
반응형