상세 컨텐츠

본문 제목

백준 // 2470//두 용액/ 항해99//정렬과 투 포인터(Two Pointers) 알고리즘

cote/Intermediate

by 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;
}

관련글 더보기