안녕하세요
프로그래머스 JS [삼총사] 전역탐색 본문
- 삼총사
문제 설명
제한사항
입출력 예numberresult
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 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
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
프로그래머스 JS [크기가 작은 부분 문자열] (0) | 2023.01.13 |
---|---|
프로그래머스 JS [콜라 문제] (0) | 2022.10.30 |
프로그래머스 JS [신규 아이디 추천]★ 정규식, padEnd() (0) | 2022.10.07 |
프로그래머스 JS [실패율] (0) | 2022.10.07 |
프로그래머스 JS [시저 암호] charCodeAt()/String.fromCharCode() (0) | 2022.10.05 |