본문 바로가기

코딩테스트/c++

[백준] 3273번 두 수의 합

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