백준/투포인터

두 용액

연구하는개발자 2021. 4. 11. 17:44
728x90

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<vector>
#include<algorithm>
#include<math.h>
#include<cmath>

using namespace std;
long long liquid[100001];

int main() {

	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> liquid[i];
	}

	sort(liquid, liquid + n);

	int s = 0;
	int e = n-1; 
	
	long long minnum = abs(liquid[s]+liquid[e]);
	
	long long al = liquid[s];
	long long ar = liquid[e];
	

	while (s < e) {

		long long sum = liquid[s] + liquid[e];
		
		if (abs(sum) < minnum) {
			minnum = abs(liquid[s] + liquid[e]);
			al = liquid[s];
			ar = liquid[e];
		}

		
		if (sum > 0) {
			e--;
		}
		else {
			s++;
		}

	}

	cout << al << " " << ar;
	return 0;

}

- 두 용액의 값을 더한 결과가 음수일 경우 왼쪽 포인터를 증가 시키고 , 양수일 경우 오른쪽 포인터를 감소시킨다.