[프로그래머스] 삼총사 JS

김우진·2023년 3월 3일

문제

문제 설명 및 제한사항

입출력 예

입출력 예시 2번을 기준으로 우선 대략적인 로직부터 짜보기로 했다.

// 대략적으로 구현한 로직

const number = [-3, -2, -1, 0, 1, 2, 3]	

function solution(number) {
  let answer = 0;
  if(number[i] + number[j] + number[k] === 0){
    answer += 1
  }
    return answer;
}

// solution(number); === 5

대략 이런식으로 실행하면 될거 같은데 이렇게 실행하고 답이 5가 나와야 하는데 문제는 i, j, k 를 한번에 따로 구할 방법이 있는가 아니면 반복문을 3번을 돌려야 하는가에 대해서 고민했다.

반복문 관련해서 좀 찾아보았으나 관력 로직은 못찾았고 무식하게 반복문을 3번을 돌려보았다.

// 별 생각없이 구현해본 반복문

const number = [-3, -2, -1, 0, 1, 2, 3]	

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

solution(number);

5가 나와야 할 정답에 37이 나왔다. 다시 좀더 생각해보기로 했다.

j = 0 => j = i + 1
k = 0 => k = j + 1

으로 변경했다

// 최종 정답

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

다음과 같이 작성하고 다른 입출력 예도 넣어보았더니 모두 정상 작동하였다

뭔가 한번에 for문 세번을 돌리는 대신 다른 메서드로 할 수 있을줄 알았는데 예시 답에도 없는것을 보면 어떠한 것들은 그냥 for문을 여러번 돌리는게 정답인가 싶다.

0개의 댓글