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;
}