3-SUM 알고리즘을 이용하여 문제를 풀 되, 정확한 조합이 아닌 가장 가까운 답을 찾는 것이 목표이다.
고로 합산한 결과 값 중 현재 최소인 조합의 결과를 저장해야 한다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int a, b, c;
long long N, temp, best = LLONG_MAX;
vector<long long> val;
int main(){
cin >> N;
for (int i = 0 ; i < N ; i++){
cin >> temp;
val.push_back(temp);
}
sort(val.begin(), val.end());
for(int first = 0 ; first < val.size() - 2; first++){
int second = first + 1;
int third = N - 1;
while(second < third){
long long result = val[first] + val[second] + val[third];
if( abs(result) < abs(best) ){
best = abs(result);
a = first;
b = second;
c = third;
}
if(result < 0) second++; else third--;
}
}
cout << val[a] << " " << val[b] << " " << val[c] << endl;
return 0;
}
알고리즘 자체는 한번 이해하면 매우 단순한 편이다.
'백준 > 카테고리별' 카테고리의 다른 글
[BOJ] 단계별로 풀어보기 - 우선순위 큐 (0) | 2020.07.06 |
---|---|
[BOJ] 2094 수학은 너무 쉬워 (0) | 2020.04.24 |
[BOJ] 11000 강의실 배정 (0) | 2020.04.17 |
[BOJ] 7579 앱 (0) | 2020.04.16 |
[BOJ] 11562 백양로 브레이크 (0) | 2020.04.14 |
댓글