N의 최대 범위가 15,000이므로 O(nlogn) 시간 복잡도 알고리즘을 사용해도 된다. 일반적으로 정렬 알고리즘의 시간 복잡도는 O(nlogn)이므로, 정렬을 사용해도 된다. 따라서 입력받은 N개의 재룟값을 정렬한 다음 양쪽 끝의 위치를 투 포인터로 지정해 문제에 접근하도록 한다.
투 포인터 이동 원칙
A[i] + A[j] > M : j--
A[i] + A[j] < M : i++
A[i] + A[j] == M: i++ j++ count++
# 주몽의 명령
import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
A = list(map(int, input().split()))
A.sort()
count = 0
i = 0
j = N-1
while i < j:
if A[i] + A[j] < M:
i += 1
elif A[i] + A[j] > M:
j -= 1
else:
count += 1
i += 1
j -= 1
print(count)