안녕하세요

프로그래머스 JS [삼총사] 전역탐색 본문

프로그래머스/Lv.1

프로그래머스 JS [삼총사] 전역탐색

sakuraop 2022. 10. 29. 22:29
  • 삼총사
문제 설명

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.


제한사항
  • 3 ≤ number의 길이 ≤ 13
  • -1,000 ≤ number의 각 원소 ≤ 1,000
  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.

입출력 예numberresult
[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

 


 

모든 조합을 탐색하여 세 요소의 합이 0이 되는 경우에는 count를 +1 해줍니다.

 

1. 전역탐색으로 세 명의 합이 0이 되는 경우의 수를 찾습니다.
2. 0이 되는 경우의 수의 가짓수를 반환합니다.

 

 

추가설명+

첫번째 for문 i = 0;
두번째 for문 j = i+1;
세번째 for문 k = j+1;

으로 시작 조건을 정하게 되면

첫번째 시행 arr[0], arr[1], arr[2] 
두번째 시행 arr[0], arr[1], arr[3]
세번째 시행 arr[0], arr[1], arr[4]
네번째 시행 arr[0], arr[1], arr[5]

이렇게 세번째 for문이 배열의 길이만큼 시행된 뒤 두번째 for문의 j가 +1이 됩니다.

다섯번째 시행 arr[0], arr[2], arr[3] 
여섯번째 시행 arr[0], arr[2], arr[4]
일곱번째 시행 arr[0], arr[2], arr[5]
여덟번째 시행 arr[0], arr[3], arr[4]
아홉번째 시행 arr[0], arr[3], arr[5]
열번째 시행 arr[0], arr[4], arr[5]

그리고 열번째 시행을 거친 뒤에는 첫번째 for문의 i가 +1이 됩니다.

열한번째 시행 arr[1], arr[2], arr[3] 

이렇게 모든 경우의 수를 탐색하는 방식을 전역탐색/브루트포스/Brute-force 라 부릅니다.

 

 

제출한 답

function solution(number) {
    const arrLenght = number.length
    let count = 0;
    
    for(i=0; i<arrLenght;i++){
        for(j=i+1; j<arrLenght;j++){
            for(k=j+1;k<arrLenght;k++) {
                // 1. 전역탐색으로 세 명의 합이 0이 되는 경우의 수를 찾습니다.
                if(number[i]+number[j]+number[k]===0) {
                    // 2. 존재한다면 count에 +1을 합니다.
                    count++
                    continue
                }            
            }
        }
    }
    // count를 반환합니다.
    return count
}