https://school.programmers.co.kr/learn/courses/30/lessons/131705?language=javascript
function solution(number) {
let result = 0;
for(let i = 0; i < number.length - 2; i++){
for(let j = i + 1; j < number.length - 1; j++){
for(let k = j + 1; k < number.length; k++){
if(number[i] + number[j] + number[k] === 0){
result++;
}
}
}
}
return result;
}
반복문을 돌려서 쉽게 풀었다. 주의 사항으로는 경우의 수를 생각해야 한다. 전부 number.length를 사용하게 될 경우, 중복된다. 따라서 i의 경우 number.length - 2, j의 경우 number.length - 1을 해줬다.
function solution(number) {
let result = 0;
const setItem = (current, start) => {
if(current.length === 3) {
result += current.reduce((acc, cur) => acc + cur, 0) === 0 ? 1 : 0;
return;
}
for(let i = start; i < number.length; i++){
setItem([...current, number[i]], i + 1);
}
}
setItem([], 0);
return result;
}
setItem을 통해서 3개의 번호를 선택합니다. if(current.length === 3)
재귀함수를 통해 계속해서 반복합니다. reduce 함수를 통해 3개의 값의 합이 0이 참이라면 1을 result += 1을 통해 더해주고, 반대로 3개의 합이 거짓이라면 0을 더합니다.
이해가 가능하면서 효과적인 풀이방법이라고 생각됩니다. 하지만 개인적으로 spread Operator 를 자주 사용하는 편이 아니라, 연습이 필요해보입니다.