#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
int N = 0;
std::cin >> N;
int iAnswer = 0;
std::vector<long long> vec(N);
for (int i = 0; i < N; ++i)
{
std::cin >> vec[i];
}
sort(vec.begin(), vec.end());
for (int i = 0; i < N; ++i)
{
int iLeft = 0;
int iRight = N - 1;
while (iLeft < iRight)
{
if (iLeft == i)
{
++iLeft;
continue;
}
if (iRight == i)
{
--iRight;
continue;
}
if (vec[i] > vec[iLeft] + vec[iRight])
++iLeft;
else if (vec[i] == vec[iLeft] + vec[iRight])
{
++iAnswer;
break;
}
else
--iRight;
}
}
std::cout << iAnswer;
return 0;
}
처음엔 이분탐색으로 모든 걸 더해서 풀라했더니
본인 것도 같이 더한 게 들어가더라...
결국엔 투포인트로 푸는 게 제일 쉬운 방법이었다...
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 12919번 A와 B 2 (0) | 2022.04.28 |
---|---|
[C++]백준 1806 부분합 (0) | 2022.04.28 |
[C++]백준 13549번 숨바꼭질3 (0) | 2022.04.25 |
[C++]백준 10021번 Watering the Fields (0) | 2022.04.22 |
[C++]위클리 챌린지 모음사전(프로그래머스 2레벨) (0) | 2022.04.21 |