본문 바로가기

백준/투포인터

두 용액

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;

}

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

'백준 > 투포인터' 카테고리의 다른 글

부분합 - 1806번  (0) 2021.09.01
두수의 합 - 3273번(Java)  (0) 2021.09.01
겹치는건 싫어  (0) 2021.04.12
구간 합 구하기4  (0) 2021.04.08
배열합치기  (0) 2021.04.08