본문 바로가기
Algorithm/자료구조

[백준] 2470번 : 두 용액 (C++)

by 루시킴 2021. 8. 30.

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

 

2470번: 두 용액

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

www.acmicpc.net

정렬 및 이분탐색 문제이다. 

숫자 범위가 -10억~10억 이므로, 두개의 숫자를 합쳐도 20억을 넘어가지 않기 때문에 long long 이 아닌 int로 해결하였다. 

숫자를 먼저 오름차순으로 정렬하고, 왼쪽 포인터는 0 오른쪽 포인터는 N-1부터 시작하였다.

L<R인 동안 각 포인터가 가리키고 있는 숫자의 합이 음수면 L++, 반대면 R--을 하여 해결하였다.

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

int N,n,L,R;
int result= 2000000001;
vector<int> v;
int finalL, finalR;

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

	L = 0; R = N - 1;
	int tmpSum;
	while (L < R) {
		tmpSum = v[L] + v[R];
		if (result > abs(tmpSum)) {
			result = abs(tmpSum);
			finalL = v[L];
			finalR = v[R];
		}
		if (tmpSum > 0)R--;
		else L++;
	}
	cout << finalL << " " << finalR << endl;
}

댓글