1일1알

백준 2470번 두 용액 C++ 본문

알고리즘

백준 2470번 두 용액 C++

영춘권의달인 2022. 5. 17. 12:51

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

 

left는 맨 왼쪽부터, right는 맨 오른쪽부터 시작해서

v[left] + v[right]의 값이 0보다 작으면 left를 증가시키고, 0보다 크면 right를 줄이는 식으로 해서 문제를 해결하였다.

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>

using namespace std;
using ll = long long;

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

	int n;
	cin >> n;
	vector<int> v(n);

	for (int i = 0; i < n; i++) {
		cin >> v[i];
	}
	sort(v.begin(), v.end());

	int MIN = 2000000001;

	int left = 0;
	int right = n - 1;
	int ans1, ans2;
	while (left < right) {
		int sum = v[left] + v[right];
		if (abs(sum) < MIN) {
			ans1 = v[left];
			ans2 = v[right];
			MIN = abs(sum);
			if (sum == 0) break;
		}
		if (sum < 0) {
			left++;
		}
		else if (sum > 0) {
			right--;
		}
	}
	cout << ans1 << " " << ans2;
};