An array A consisting of N integers is given. A triplet (P, Q, R) is triangular if it is possible to build a triangle with sides of lengths A[P], A[Q] and A[R]. In other words, triplet (P, Q, R) is triangular if 0 ≤ P < Q < R < N and:
For example, consider array A such that:
A[0] = 10 A[1] = 2 A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 12
There are four triangular triplets that can be constructed from elements of this array, namely (0, 2, 4), (0, 2, 5), (0, 4, 5), and (2, 4, 5).
Write a function:
int solution(vector<int> &A);
that, given an array A consisting of N integers, returns the number of triangular triplets in this array.
For example, given array A such that:
A[0] = 10 A[1] = 2 A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 12
the function should return 4, as explained above.
Write an efficient algorithm for the following assumptions:
#include <algorithm>
int solution(vector<int> &A) {
int n = A.size();
int ans = 0;
sort(A.begin(), A.end());
for(int i=0;i<n-2;i++) {
int j = i+1;
int k = j+1;
while(j<n-1) {
if(k<n && A[i]+A[j] > A[k]) {
k++;
}
else {
ans += k-j-1;
j++;
}
}
}
return ans;
}
비슷한 방식으로 3중 for문 쓰니 성능 에러가 발생했다...
뭐가 다른지 잘 모르겠지만 이렇게 풀어야 100% 정답이 뜬다 ㅜ.ㅜ