cote/Intermediate
백준 // 2470//두 용액/ 항해99//정렬과 투 포인터(Two Pointers) 알고리즘
geminanolja
2025. 1. 19. 23:31
https://www.acmicpc.net/problem/2470
주어진 용액들 중 두 개의 용액을 혼합했을 때, 혼합 용액의 특성값이 0에 가장 가까운 경우를 찾고, 해당 두 용액의 특성값을 출력하는 프로그램을 작성.
- 첫 줄: 용액의 개수 NN (2≤N≤100,0002 \leq N \leq 100,000).
- 둘째 줄: NN개의 용액 특성값 (−1,000,000,000≤x≤1,000,000,000-1,000,000,000 \leq x \leq 1,000,000,000)이 공백으로 구분되어 주어짐.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int n;
cin >> n;
vector<long long> solutions(n);
for (int i = 0; i < n; i++)
{
cin >> solutions[i];
}
sort(solutions.begin(), solutions.end());// {-99, -2, -1, 4, 98}
int left = 0, right = n - 1;
long long closest_sum = LLONG_MAX;//오버플로우 방지
long long result01 = 0, result02 = 0;
while (left < right)
{
long long sum = solutions[left] + solutions[right];
if (abs(sum) < abs(closest_sum))
{
closest_sum = sum;
result01 = solutions[left];
result02 = solutions[right];
}
if (sum < 0)
{
left++;
}
else right--;
}
cout << result01 << " " << result02 << endl;
return 0;
}