반응형
#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 |
댓글