Coding_Test_C++

BaekJoon 2467번: 용액(C++)

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

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net

풀이법

1) 투포인터를 활용하여 문제를 해결하면 시간 내에 문제를 해결할 수 있다.

2) sort를 활용하여 입력받은 배열을 정렬하고, 처음 index와 마지막 index를 합하였을 때 값이 음수이면 left 값을 1 증가 시키고, 양수이면 right 값을 1 감소시켰다.

#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <math.h>
#include <map>
#define INF 987654321
using namespace std;

int n;
vector<long long> vec;
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		long long a;
		cin >> a;
		vec.push_back(a);
	}
	sort(vec.begin(), vec.end());
	int start = 0;
	int end = vec.size() - 1;

	long long min = 2e9;
	int ansStart = 0;
	int ansEnd = vec.size() - 1;
	while (start< end)
	{
		long long temp = (vec[end] + vec[start]);
		int comp = abs(temp);
		if (comp <min)
		{
			min = comp;
			ansStart = start;
			ansEnd = end;
		}
		if (temp < 0)
			start++;
		else
			end--;
	}
	cout << vec[ansStart] << " " << vec[ansEnd];
}