처음에 'M과 차이가 가장 적은 숫자 3개'의 합라고 잘못 이해해 해맸다.
문제에서 요구하는 것은 M과 차이가 가장 적은 '숫자 3개의 합'이다. (M보다 작다는 조건 하에)
따라서 주어진 카드의 숫자중에서 3개를 뽑아 나올 수 있는 모든 조합의 합을 구하고,
그 조합 중에 가장 작은 합을 구하면 된다.
나는 조합의 합을 구한 후 M과의 차이값을 구해 sum 이라는 벡터에 담아 최소값을 구하고
그 최소값을 다시 M에서 빼줘서 원래의 값을 출력하게 했다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int N, M;
cin >> N >> M;
int cards[100];
vector<int> sum;
//입력
for (int i = 0; i < N; i++)
{
cin >> cards[i];
}
//삼중FOR문으로 모든 조합의 합 구하기
for (int i = 0; i < N; i++)
{
for (int j = i + 1; j < N; j++)
{
for (int k = j + 1; k < N; k++)
{
int num = cards[i] + cards[j] + cards[k];
if(num<=M)
sum.push_back(M-num);
//합이 M보다 작을 경우 M값과 차이를 벡터에저장
}
}
}
//최소값 찾기
int min = *min_element(sum.begin(), sum.end());
cout << M - min; //숫자 원래대로 복구(차이값을 원래 합 값으로)
}
'C++ > 백준 코딩테스트 풀이 C++' 카테고리의 다른 글
C++ 10871 X보다 큰 수 (0) | 2022.07.03 |
---|---|
C++ 2869 달팽이는 올라가고 싶다 (0) | 2022.07.02 |
C++ 11050 이항계수 (0) | 2022.06.29 |
C++ 10773 제로 (0) | 2022.06.28 |
C++ 1085 직사각형에서 탈출 / 제곱 / 제곱근 / 최소값 (0) | 2022.06.27 |