문제 출처
- 풀이법이 굉장히 신기해서 가져온 문제이다.
- 요즘 Bakingdog 님의 저지를 풀고 있다..
1. 문제설명
n
개의 서로 다른 양의 정수로 이뤄진 수열이 있다.
- $a_i + a_j$=
x
를 만족하는 쌍의 수를 구하라.
2. 알고리즘 설계
- $O(N^2)$으로 접근하면 무조건 시간초과이다.
- i번째 수를 x에서 뺐을 때 그 수가 입력되었는지 확인하면된다!
3. 로직
int arr[2000000];
for(int i=0; i<n; i++)
if(arr[x-arr[i]] > 0) ans++;
4. 전체 코드
#include <bits/stdc++.h>
using namespace std;
int n, x, arr[2000001], ans;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int tmp, i = 0; i < n; i++) {
cin >> tmp;
arr[tmp]++;
}
cin >> x;
for (int i = 0; i < (x + 1) / 2; i++)
if (arr[i] == 1 && arr[x - i] == 1)
ans++;
cout << ans;
return 0;
}