쉬운 정렬문제이다.
벡터를 오름차순으로 정렬하고
i는 1부터, j는 n부터 계산을 시작하여, j가 감소해온다.
계산에 맞는 i, j를 찾았다면 다음 j는 i가 현재 i보다 커질 것이기 때문에 현재 j보다 클 수 없다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int input_graph(vector <int>& v)
{
int i, n, temp;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> temp;
v.push_back(temp);
}
sort(v.begin(), v.end());
cin >> temp;
return temp;
}
int find_answer(int x, vector <int> &v)
{
int i, j, size = v.size(), j_start = size-1;
int count = 0;
for (i = 0; i < size - 2; i++)
{
for (j = j_start; j > i; j--)
{
if (v[i] + v[j] == x)
{
count++;
j_start = j;
break;
}
}
}
return count;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector <int> v;
int x;
x = input_graph(v);
cout << find_answer(x, v) << "\n";
return 0;
}