[백준/BOJ] 백준 2470번 : 두 용액

2021. 6. 28. 23:05알고리즘 문제풀이

https://www.acmicpc.net/problem/2470

 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net

중간에서 만나는 투 포인터를 이용하여 문제를 해결했다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

int n;
vector<int> ph;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		int input;
		cin >> input;

		ph.push_back(input);
	}

	sort(ph.begin(), ph.end());

	//중간에서 만나는 투포인터를 이용한다
	int left = 0;
	int right = n - 1;
	int diff = 2000000001;
	int result1 = -1;
	int result2 = -1;

	while (left < right)
	{
		//0에 더 가까운 값을 찾았을때
		if (abs(ph[left] + ph[right]) < diff)
		{
			diff = abs(ph[left] + ph[right]);

			result1 = ph[left];
			result2 = ph[right];
		}

		//합이 음수일때
		if (ph[left] + ph[right] < 0)
			left++;

		//합이 양수일때
		else if (ph[left] + ph[right] > 0)
			right--;

		//합이 0일때
		else
			break;
	}

	cout << result1 << " " << result2 << "\n";

	return 0;
}