처음에는 sort를 한 뒤 nC3으로 3개 조합을 뽑고 x[0]+x[2] = 2*x[1]
라는 식을 통해 검증하려 하였으나 시간 초과가 발생하였습니다.
결론적으로 sort를 사용하지 않고 nC2의 조합을 사용하여 시간 초과 문제를 해결했습니다.
// nC2 조합
for i in 0..<n {
for j in range 1..<n {
// (i, j)
}
}
(i번째 점 + j번째 점) / 2
의 값이 존재한다면 둘 사이의 중간 값이 존재하는 것이므로 카운트를 증가시킵니다.import Foundation
let t = Int(readLine()!)!
for _ in 0..<t {
let n = Int(readLine()!)!
let x = readLine()!.split(separator: " ").map(){Int($0)!}
var d = [Double: Bool]()
var cnt = 0
for i in x { d[Double(i)] = true } // 1번
for i in 0..<n { // 2번
for j in i+1..<n where d[Double(x[i]+x[j])/Double(2)] != nil { // 2-3번
cnt += 1
}
}
print(cnt)
}
import sys
input = sys.stdin.readline
t = int(input().rstrip())
for _ in range(t) :
n = int(input().rstrip())
cnt = 0
x = list(map(int, input().rstrip().split()))
d = {i:True for i in x}
for i in range(n):
for j in range(i+1, n) :
if (x[i]+x[j])/2 in d : cnt += 1
print(cnt)