쉬운 문젠데 왜 이렇게 잡생각을 많이 했을까.
다른 분 풀이를 보니까 bool 배열을 통해 존재여부만 확인하신 분도 계셨다. 그런식으로 다시 풀어봐야 겠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_element(int* N, int* M, vector<int>& element)
{
int i, temp;
cin >> *N;
cin >> *M;
//exist.resize(10000001, false);
for (i = 0; i < *N; i++)
{
cin >> temp;
element.push_back(temp);
}
return;
}
void find_answer(int N, int M, vector<int>& element)
{
int i, j, sum = 0, count = 0;
int left = 0, right = element.size() - 1;
sort(element.begin(), element.end());
// 1 2 3 4 5 7
for (i = left; i < element.size() - 1; i++)
{
//두개 합쳐서 M이 되어야 함. 더도말고 덜도 말고
//정렬이 의미가 있나? 있는 듯
//메모리 제한이 좀 빡센데
for (j = right; j > i; j--)
{
if (element[i] + element[j] == M)
{
count++;
right = j;
break;
}
}
}
cout << count << "\n";
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M;
vector <int> element;
vector <bool> exist;
input_element(&N, &M, element);
find_answer(N, M, element);
return 0;
}