문제설명
소스코드
#include <iostream>
using namespace std;
int main() {
int N, M, ans;
int sum = 0; int margin = 300000; //M과 세 수의 합의 최대 차이는 300000이므로
cin >> N >> M;
int* arr = new int[N]; //동적 할당
for (int i = 0; i < N; ++i) cin >> arr[i];
for (int i = 0; i < N - 2; ++i)
{
for (int j = i + 1; j < N - 1; ++j)
{
for (int k = j + 1; k < N; ++k)
{
sum = arr[i] + arr[j] + arr[k]; //세 수의 합
if ((M - sum >= 0) && (M - sum < margin)) // M을 넘지 않으면서 M에 최대한 가까운 카드 3장
{
ans = sum;
margin = M - sum;
}
}
}
}
cout << ans;
}
설명
브루트포스 알고리즘
말로 설명하는 것 보다 직접 실행결과를 보는 것이 더 직관적이다.
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 6단계 - 4344번 문제 (평균은 넘겠지) (0) | 2023.06.26 |
---|---|
[C++] 백준 12단계 - 2231번 문제 (분해합) (0) | 2023.06.25 |
[C++] 백준 19단계 - 18028번 문제 (스택) (0) | 2023.06.25 |
[JAVA] 백준 - 11282번 문제 (한글) (0) | 2023.06.23 |
[C++] 백준 - 13416번 문제 (주식 투자) (0) | 2023.06.22 |