https://www.acmicpc.net/problem/2798
약간 확통의 조합 느낌이 물씬 난다.
서로 다른 3개를 골라야하니, 중복되서는 안됨.
이건 뭐.. 그냥 다 해봐야한다.
경우의 수 다 따져보고 그 중에 M값에 작으면서 가장 가까운 거 출력하면 되겠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, M; // N = 카드의 갯수, M = 요구 숫자
cin >> N >> M;
std::vector<int> vec(N);
std::vector<int> sum;
for (int i = 0; i < N; i++)
cin >> vec[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.push_back(vec[i] + vec[j] + vec[k]);
}
}
}
sort(sum.begin(), sum.end());
for (int i = sum.size() - 1; i >= 0; i--)
{
if (sum[i] <= M)
{
cout << sum[i];
break;
}
}
return 0;
}
3중 반복문으로 인덱스를 맞추는게 중요한 듯 싶다.
작으면서 가장 가까운 걸 찾아야하니 반복문에서 내림차순으로 if 문 걸리게 했음.
'백준 문제풀이 > 브론즈2' 카테고리의 다른 글
백준 2309번 - 일곱 난쟁이 (브루트포스) (0) | 2022.01.16 |
---|---|
백준 2231번 - 분해합 (0) | 2021.12.17 |
백준 2292번 - 벌집 (0) | 2021.11.30 |
백준 10809번 - 알파벳 찾기 (0) | 2021.11.25 |
백준 1173 - 운동 (0) | 2021.11.10 |