# 좋다 import sys input = sys.stdin.readline def two_pointer(l, r, nums, i, target): while l < r: if l == i: l += 1 continue if r == i: r -= 1 continue now = nums[l] + nums[r] if now == target: return True if now < target: l += 1 else: r -= 1 return False def solution(): n = int(input().rstrip()) nums = list(map(int, input().rstrip().split())) sorted_nums = sorted(nums) count = 0 for i in range(n): if two_pointer(0, n-1, sorted_nums, i, sorted_nums[i]): count += 1 print(count) return solution() """ 걸린 시간: 40분 시간 복잡도: 모든 범위에 대해 투 포인터는 O(n)이고, 모든 숫자가 타겟이 되기 때문에 O(n^2)이다. 해설: 모든 것을 확인해야 하는 여부를 생각해봤을 때, 어떤 수가 있을지 모르기 때문에 다 봐야한다. 그럼 두 개의 조합을 모두 봐야 하나?를 생각했을 때 정렬해서 투 포인터를 쓰면 다 보지 않아도 된다. 이제 범위를 본인보다 작은 것들에서 투포인터를 진행하며 구현을 했다. 근데 틀렸다. 왜 why? 수가 자연수만 있는 것이 아니었다. 당연히 자연수 범위라고 생각했는데 알고보니 절대값으로 범위가 표현되어 있었다. 음수와 양수를 합치면 값이 줄어들기 때문에 타겟 숫자의 오른쪽도 후보가 될 수 있어서 모든 범위에 대해 계속 투포인터를 진행해야 한다. """