👉 문제 링크
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n,k = map(int,input().split())
arr = list(map(int,input().split()))
arr.sort()
start,end = 0,n-1
ans = sys.maxsize
cnt = 0
while start < end:
total = arr[start] + arr[end]
d = abs(k-total)
if d < ans:
ans = d
cnt = 0 # ans이 기준이 되는 것이므로 초기화
if total < k:
if d == ans:
cnt += 1
start += 1
elif total > k:
if d == ans:
cnt += 1
end -= 1
else: # d == k
cnt += 1
start += 1
print(cnt)
배열을 오름차순으로 정렬한다.
start, end를 0과 n-1로 설정한다.
k와의 차이를 비교하여 가장 작은 값을 ans에 저장한다.
if total < k:
if d == ans:
cnt += 1
start += 1
elif total > k:
if d == ans:
cnt += 1
end -= 1
else: # d == k
cnt += 1
start += 1
위 부분에서 주의해야 하는 것은 total이 k보다 작거나 크지만 d가 현재 ans 값일 때이다.
이 경우, 조합의 경우의 수를 카운트 하는 cnt 값을 올려주어야 한다.