삼총사, Javascript

cptkuk91·2023년 2월 17일
1

Algorithm

목록 보기
139/161
post-custom-banner

문제

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 를 자주 사용하는 편이 아니라, 연습이 필요해보입니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글