기초다지기/JS 코딩테스트

javaScript 정수 배열에서 0 만들기

김빵그 2023. 11. 7. 15:18

문제 

정수 배열 number가 매개변수로 주어질 때 3개의 수를 더해 0이 나올수 있는 수를 리턴하여라

나의 풀이

function solution(number) {
    let count = 0;
    const n = number.length;

      for (let i = 0; i < n; i++) {
        for (let j = i + 1; j < n; j++) {
          for (let k = j + 1; k < n; k++) {
            if (number[i] + number[j] + number[k] === 0) {
              count++;
            }
          }
        }
      }

      return count;
}
  •  count : 삼총사를 형성하는 방법의 수
  • const n. : 입력 배열의 길이
  • For
    • 세개의 중첩된 for 루프를 사용하여 첫번째, 두번째, 세번째 학생부터 시작
    • 세명의 학생 번호의 합이 0인지 확인
    • count +1

다른 풀이

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;
}
  • combination 
    • 현재조합 current , 시작인덱스 start를 매개변수로 받는다
    • 조합을 더한후 0 이면 result 1 증가
  • for
    • 시작 인덱스로부터 배열을 탐색하며 각 학생을 현재 조합인 current에 추가한다 그리고 다음 학생을 선택하기 위해 start를 1 증가
  • combination([],0)을 호출하여 초기상태에서 모든 가능한 조합 탐색