1534. Count Good Triplets
문제
정수를 원소로 갖는 배열 arr와 세 정수 a,b,c가 매개변수로 주어질 때 다음 조건을 만족하는 부분배열의 개수를 return하는 함수 만들기
조건
triplet : ( arr[i], arr[j], arr[k] )
1. 0<= i < j < k < arr.length
2. |arr[i] - arr[j]| <=a
3. |arr[j] - arr[k]| <=b
4. |arr[i] - arr[k]| <=c
가정
1. arr의 길이는 3이상 100이하
2. arr[i]는 0이상 1000이하인 정수
3. a,b,c는 0 이상 1000이하
풀이
var countGoodTriplets = function(arr, a, b, c) {
const result = [];
for ( let i = 0; i<arr.length-2; i++ ) {
for ( let j = i+1; j<arr.length-1; j ++) {
for ( let k = j+1; k<arr.length; k++ ) {
const absCondition1 = Math.abs(arr[i]-arr[j])<=a;
const absCondition2 = Math.abs(arr[j]-arr[k])<=b;
const absCondition3 = Math.abs(arr[i]-arr[k])<=c;
if((absCondition1 && absCondition2 && absCondition3)){
result.push([arr[i],arr[j],arr[k]]);
}
}
}
}
return result.length;
};
다른 풀이
var countGoodTriplets = function(array, a, b, c) {
count = 0;
for (let i = 0; i < array.length; i++) {
const element = array[i];
for (let j = i+1; j < array.length; j++) {
const element2 = array[j];
for (let k = j+1; k < array.length; k++) {
const element3 = array[k];
if (Math.abs(element - element2) <= a && Math.abs(element2 - element3) <= b && Math.abs(element - element3) <= c){
count++;
}
}
}
}
return count;
};
느낀점
count를 선언해서 따로 배열을 담지 않아도 결과값 리턴할 수 있는 방법
알고리즘 문제는 성능 이슈 고민하면서 풀기!