삼총사

hyuri·2023년 9월 22일
0

코딩테스트 연습

목록 보기
30/70

내가 작성한 답

function solution(number) {
    let answer = 0;
    for(let i = 0; i<number.length; i++){
        for(let j = i+1; j<number.length; j++) {
            for(let z = j+1; z<number.length; z++){
                    if (number[i]+number[j]+number[z] == 0){
                        answer++;
                }
            }
        }
    }
    return answer;
}

다른 답

function solution(number) {
    let result = 0;

    const combination = (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++) {
            combination([...current, number[i]], i + 1);
        }
    }
    combination([], 0);
    return result;
}

해석

내가 작성한 답은 중복 루프를 사용하기 때문에 입력 데이터가 크면 클수록 시간복잡도가 크게 증가할 수 있다.
다른 답은 재귀 함수를 이용해서 중첩 루프를 간소화하였음.
따라서, 입력 데이터가 커도 일정한 시간 복잡도를 가진다.

profile
개발자가 되고 싶은 지망생

0개의 댓글