[백준/BOJ] 백준 2473번 : 세 용액
2021. 4. 9. 12:42ㆍ알고리즘 문제풀이
입력받은 값을 정렬한 뒤, left는 고르고 고른 오른쪽에서 mid와 right를 가운데서 만나는 투 포인터를 이용해서 문제를 해결했다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstdlib>
using namespace std;
int n;
vector<long long> ph;
long long result_value = numeric_limits<long long>::max();
vector<long long> result(3, 0);
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++)
{
long long input;
cin >> input;
ph.push_back(input);
}
sort(ph.begin(), ph.end());
int left;
int mid;
int right;
//left는 고르고 오른쪽에서 mid와 right를 가운데서 만나는 투포인터를 이용
for (int i = 0; i < n - 2; i++)
{
left = i;
mid = i + 1;
right = n - 1;
long long this_value;
while (mid < right)
{
this_value = ph[left] + ph[mid] + ph[right];
if (abs(result_value) > abs(this_value))
{
result_value = ph[left] + ph[mid] + ph[right];
result[0] = ph[left];
result[1] = ph[mid];
result[2] = ph[right];
}
if (this_value < 0) //현재 값이 음수일때
mid++;
else if (this_value > 0) //현재 값이 양수일때
right--;
else //현재 값이 0일때
break;
}
}
for (int i = 0; i < 3; i++)
cout << result[i] << " ";
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 1113번 : 수영장 만들기 (0) | 2021.04.09 |
---|---|
[백준/BOJ] 백준 2064번 : IP 주소 (0) | 2021.04.09 |
[백준/BOJ] 백준 1202번 : 보석 도둑 (0) | 2021.03.25 |
[백준/BOJ] 백준 1946번 : 신입 사원 (0) | 2021.03.25 |
[백준/BOJ] 백준 20541번 : 앨범정리 (0) | 2021.03.25 |