728x90
num 배열은 입력받은 수열을 저장하는 배열이고 ncount는 수열 내에 있는 숫자가 존재하는지 확인하는 배열이다.
숫자를 입력받으면 num 배열에 넣고 ncount[해당숫자]의 값을 1 더해줌으로써 해당 숫자가 num 배열에 존재한다는 것을 표시한다.
num 배열에 있는 숫자 num[i]와 합하여 x가 되는 수가 존재하면 ncount[x-num[i]]은 1일 것이다. x-num[i]는 음수가 될 수 있으므로 예외처리를 해줬다. 문제에서 쌍의 갯수를 물어봤으므로 count를 2로 나누어 출력한다.
전체 코드
#include <bits/stdc++.h>
using namespace std;
int num[100007]; // 수열 저장하는 배열
int ncount[2000007]; // 수 존재 여부를 저장하는 배열
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int number;
cin >> number;
num[i] = number;
// 5를 입력 받으면 ncount[5] = 1로 저장하여 num 배열에 5가 존재한다는 뜻
ncount[number]++;
}
int x;
cin >> x;
int count = 0;
for (int i = 0; i < n; i++) {
// x-num[i]는 음수가 될 수 있으므로 예외 처리
if (x-num[i] > 0 && ncount[x - num[i]] > 0)
count++;
}
cout << count / 2 << "\n";
return 0;
}
728x90
반응형
'코딩테스트 > c++' 카테고리의 다른 글
[백준] 1966번 프린터 큐 (0) | 2021.07.07 |
---|---|
[프로그래머스] 오픈채팅방 (3) | 2021.07.06 |
[백준] 1406번 에디터 (0) | 2021.06.29 |
백준 c++ 1697번 (2) | 2021.01.22 |
백준 c++ 2178번 (0) | 2021.01.19 |