#include <iostream>
#include <algorithm>
#include <vector>
#include <tuple>
 
int main()
{
	int N = 0;
	std::cin >> N;
	std::vector<long long> vec(N, 0);
 
	for (int i = 0; i < N; ++i)
	{
		std::cin >> vec[i];
	}
 
	std::sort(vec.begin(), vec.end());
 
	int iStart = 0;
	int iEnd = N - 1;
	std::tuple<long long, long long, long long> tuple(0,0,2000000001);
 
	while (iStart != iEnd)
	{
		if (abs(vec[iStart] + vec[iEnd]) < std::get<2>(tuple))
			tuple = { vec[iStart], vec[iEnd], abs(vec[iStart] + vec[iEnd]) };
 
		if (abs(vec[iStart]) >= abs(vec[iEnd]))
			++iStart;
 
		else
			--iEnd;
	}
 
	std::cout << std::get<0>(tuple) << " " << std::get<1>(tuple);
 
	return 0;
}

투포인트 문제

1. 두 개의 크기를 확인해서 큰 쪽이 작은 쪽으로 움직이고

2. 두 개가 같을 때까지 한다.

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 1927 최소 힙  (0) 2022.06.08
[C++] 백준 1976 여행 가자  (0) 2022.06.08
[C++] 백준 1446 지름길  (0) 2022.06.04
[C++] 백준 15989 1, 2, 3 더하기  (0) 2022.06.03
[C++] 백준 5972 택배 배송  (0) 2022.06.02

+ Recent posts