본문 바로가기
코딩테스트 준비/백준

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

by 스테디코디스트 2023. 7. 13.
반응형

<문제 소개>

 


<소스 코드>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main()
{	
	int result = 0;

	int N, M;
	cin >> N >> M;
	if (N < 3 || N > 100 || M < 10 || M > 300000) return 0;

	vector<int> v;

	for (int i = 0; i < N; i++)
	{
		int x;
		cin >> x;
		if (x < 0 || x> 100000) return 0;

		v.push_back(x);
	}

	int sum = 0;

	for (int i = 0; i < v.size() - 2; i++)
	{
		for (int j = i + 1; j < v.size() - 1; j++)
		{
			for (int k = j + 1; k < v.size(); k++)
			{	
				int curSum = v[i] + v[j] + v[k];

				if (curSum > sum && curSum <= M)
				{
					sum = curSum;
				}
			}
		}
	}

	cout << sum;

	return 0;
}

<풀이과정>

1. 주어진 조건에 맞게 N과 M을 입력받음

2. N번만큼 반복하며 입력하며 벡터 v에 해당 값들을 넣어줌

3. 벡터 v를 돌면서 세 수의 합이 M보다 크지 않으면서 가장 큰 값이 되는 값을 찾음


 

<코멘트>

3중 반복문이라 시간초과 나올줄 알았는데 다행히 안 나왔다!(아마 그냥 3중 for문이 아니라서 그런듯..?)