https://www.acmicpc.net/problem/2467
풀이법
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];
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 6118번: 숨바꼭질 (0) | 2021.07.19 |
---|---|
BaekJoon 1303번: 전쟁 - 전투(C++) (0) | 2021.07.19 |
BaekJoon 17070번: 파이프 옮기기 1(C++) (0) | 2021.07.16 |
BaekJoon 15686번: 치킨 배달(C++) (0) | 2021.07.15 |
BaekJoon 14502번: 연구소 (0) | 2021.07.14 |