BOJ - 3273번_두 수의 합 (C++)
BOJ - 3273번_두 수의 합
n개의 서로 다른 양의 정수 a1, a2, …, an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하기
풀이
각 정수에 해당하는 인덱스의 배열 값을 1로 변경하고, 배열에 (x-현재 정수)값이 있다면 count를 1씩 증가시킨다. 쌍의 수를 구하는 것이므로 count를 2로 나눈다.
소스코드
#include <bits/stdc++.h>
using namespace std;
int arr[1000005];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, x;
cin >> n;
vector<int> num(n);
for(int i=0; i<n; i++) {
cin >> num[i];
arr[num[i]]++;
}
cin >> x;
int cnt=0;
for(int i=0; i<n; i++) {
if(x>=num[i] && arr[x-num[i]]) {
cnt++;
}
}
cout << cnt/2;
}