백준

백준 : 3273 두 수의 합 C++

TIN9 2022. 9. 5.
반응형
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

bool EnableArray[2000001] = {};

int main()
{
	// 코테에서만 사용하는 함수들
	// 개발 환경에서는 사용x
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	// 수열의 크기 n
	int ArraySize;

	std::cin >> ArraySize;

	std::vector<int> vecNumb;
	std::vector<bool>	vecBool;

	// 미리 메모리 와 데이터를 크기만큼 할당 해 놓는다.
	
	vecNumb.resize(ArraySize);

	for (int i = 0; i < ArraySize; ++i)
	{
		std::cin >> vecNumb[i];
	}

	int AccNumb;
	int ResultNumb = 0;

	std::cin >> AccNumb;

	for (int i = 0; i < ArraySize; ++i)
	{
		// 내가 풀이 했던것
        // 2중 포문을 사용해서 O(N^2)되어 시간초과
		/*for (int j = i + 1; j < ArraySize; ++j)
		{
			if (vecNumb[i] + vecNumb[j] == AccNumb)
			{
				ResultNumb++;
			}
		}*/
		
      	// 바킹독님의 풀이방법
		// 더한값에서 i번째 넘버값을 뺀게 0 보다 크고 활성화 배열의 해당 쌍의 인덱스값이 활성화 되어있는지를 판단하고
		// 되어있다면 이전에 해당 배열을 탐색을 했는지 판단을 했다는 의미이고 한 쌍이 된다는 의미이므로
		// if문을 통과해 결과넘버를 ++해준다
		if (AccNumb - vecNumb[i] > 0 && EnableArray[AccNumb - vecNumb[i]])
		{
			ResultNumb++;
		}
		// 여기로 왔다면 아직 한 쌍을 못 찾았다는 의미
		// 한 쌍이 배열 내부에 존재하더라도 아직은 못찾았다는 의미
		EnableArray[vecNumb[i]] = true;
	}

	std::cout << ResultNumb;
}
반응형

'백준' 카테고리의 다른 글

백준 : 5397 키로거 C++  (0) 2022.09.05
백준 : 10807 개수 세기 C++  (0) 2022.09.05
백준 : 1475 방 번호 C++  (0) 2022.09.05
백준 : 2577 숫자의 개수  (0) 2022.09.05
백준 : 10808 알파벳 개수  (0) 2022.09.02

댓글