알고리즘/BOJ

백준 2473번 세 용액

꾸준함. 2018. 7. 8. 19:29

문제 링크입니다: https://www.acmicpc.net/problem/2473


첫 번째 용액을 기준으로 나머지 두 용액은 양방향 탐색을 통해 세 용액의 합의 최소값을 찾는 문제였습니다.

사실 구현보다는 long long 자료형의 최대값을 정의하는데 애를 먹었던 문제였습니다.

처음에는 numeric_limits<long long>::infinity()로 minimum을 초기화했는데 오답처리를 받아 minimum 값을 확인한 결과 0으로 초기화가 되어있었습니다.

따라서, climits 헤더파일을 추가하고 minimum을 LLONG_MAX로 초기화했습니다!


#include <iostream>

#include <algorithm>

#include <climits> //LLONG_MAX

using namespace std;

 

const int MAX = 5000;

 

int N, idx1, idx2, idx3;

long long minimum;

long long liquid[MAX];

 

void print3Liquid(void)

{

        for (int i = 0; i < N; i++)

        {

                 //양방향에서

                 int j = i + 1;

                 int k = N - 1;

 

                 while (1)

                 {

                         if (j >= k)

                                 break;

 

                         long long sum = liquid[i] + liquid[j] + liquid[k];

                         //최소값 갱신 때마다 idx1~idx3 초기화

                         if (llabs(sum) < minimum)

                         {

                                 minimum = llabs(sum);

                                 idx1 = i;

                                 idx2 = j;

                                 idx3 = k;

                         }

 

                         //오름차순 정렬을 했으므로

                         if (sum < 0)

                                 j++;

                         else

                                 k--;

                 }

        }

 

        cout << liquid[idx1] << " " << liquid[idx2] << " " << liquid[idx3] << endl;

}

 

int main(void)

{

        cin >> N;

 

        for (int i = 0; i < N; i++)

                 cin >> liquid[i];

 

        sort(liquid, liquid + N);

 

        minimum = LLONG_MAX;

        print3Liquid();

 

        return 0;

}

 


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 14921번 용액 합성하기  (0) 2018.07.08
백준 2470번 두 용액  (0) 2018.07.08
백준 2563번 색종이  (2) 2018.07.08
백준 2042번 구간 합 구하기  (0) 2018.07.08
백준 1987번 알파벳  (0) 2018.07.08