삼총사

RyuIsangGo🤘·2023년 8월 22일
0

문제

나의코드

const solution = (number) => {
    let count = 0;
    number.sort((x,y) => x-y);
    for(let i = 0; i < number.length -1; i++) {
        let findSum = -number[i];
        for(let leftIndex = i+1; leftIndex < number.length-1; leftIndex++) {
            let rightIndex = number.length-1;
            while(leftIndex < rightIndex) {
                let nowSum = number[leftIndex] + number[rightIndex];
                if(nowSum > findSum) {
                    --rightIndex;
                } else if(nowSum === findSum){
                    ++count;
                    --rightIndex;
                } else if(nowSum < findSum) {
                    break;
                }
            }
        }
    }
    return count;
}

로직흐름

  • 문제를 정리하면, 3개의 숫자를 골라서 이것의 합이 0이 되는 조합이 몇개인지 반환하는 문제이다.
  1. number배열을 작은 숫자부터 정렬을 했다.
  2. 하나 요소를 딱 정한다음 그 나머지 요소들 중에 두개의 합이 하나의 요소에 마이너스 부호가 된 값이여야 한다.
  3. 나머지 요소 들중에 두개를 꺼내서 그 두개의 합을 알아야 하기 때문에 인덱스를 leftIndex, rightIndex 두개를 만들었다.
  4. leftIndex는 2.에서 고른 요소의 인덱스값+1부터 number.length -2까지이다.
  5. rightIndex는 number.length -1인덱스부터 lefthIndex+1까지다.
  6. 만약 두 요소의 합이 찾아야 하는 합보다 크다면 rightIndex를 하나 줄였다.
  7. 만약 두 요소의 합이 찾아야 하는 합보다 작다면 현재 leftIndex로 찾아야 하는 합을 만들 수 없으므로 반복을 멈춘다.
  8. 만약 두 요소의 합이 찾아야 하는 값이라면 count를 +1해줬다.
  9. leftIndex가 rightIndex보다 작을 때까지 반복되며,
  10. 이 두 인덱스가 같아지면, 다음 leftIndex로 넘어간다.
profile
이전 블로그 입니다.

0개의 댓글