반응형
<문제 소개>
<소스 코드>
#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문이 아니라서 그런듯..?)