본문 바로가기
백준/카테고리별

[BOJ] 2473 세 용액

by Riverandeye 2020. 4. 11.

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

댓글