😄 밑에 초등부 문제라고 써있다. 어나더 레벨의 친구들이 풀었나보다.
두 포인터
를 생각했다.두 포인터
를 쓰려면 오름차순 정렬부터 해준다.int start = 0, end = N - 1, result = 2000000000;
int resultx, resulty;
while (start < end)
{
int sum = v[start] + v[end];
if (abs(sum) < abs(result))
{
result = sum;
resultx = v[start];
resulty = v[end];
}
if(sum > 0)
end -= 1;
else if(sum < 0)
start += 1;
else if(sum == 0)
break;
}
if(abs(num) < abs(result))
구문은 답을 찾기 위한 if문이다.#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <string.h>
using namespace std;
#define endl "\n"
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
vector<int> v;
cin >> N;
for (int i = 0; i < N; i++)
{
int num;
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
int start = 0, end = N - 1, result = 2000000000;
int resultx, resulty;
while (start < end)
{
int sum = v[start] + v[end];
if (abs(sum) < abs(result))
{
result = sum;
resultx = v[start];
resulty = v[end];
}
if(sum > 0)
end -= 1;
else if(sum < 0)
start += 1;
else if(sum == 0)
break;
}
cout << resultx << " " << resulty << endl;
}
😳
두 포인터
에 대해서 알고 있다면 쉽게 풀수 있는 문제지만 그렇지 않다면 조금은 어려울 수도 있을 문제다.