(Lv. 1) 삼총사 (문제 링크)
문제 설명
한국중학교에 다니는 학생들은 각자 정수 번호를 가지고 있다.
이 학교의 학생 3명의 정수 번호를 더했을 때 0이 되면, 이 3명의 학생은 삼총사라고 한다.
한국중학교 학생들의 정수 번호를 나타내는 정수 배열 number가 주어졌을 때,
학생들 중 삼총사를 만들 수 있는 방법의 수를 return하는 solution 함수를 완성하라.
예를 들어, 5명의 학생이 각각 [-2, 3, 0, 2, -5] 인 경우,
- (1, 3, 4)번째 학생의 정수 번호를 더하면 -2 + 0 + 2 = 0이 되므로 세 학생은 삼총사다.
- (2, 4, 5)번째 학생의 정수 번호를 더해도 3 + 2 + (-5) = 0이 되므로 세 학생도 삼총사다.
따라서, 이 경우에 삼총사를 만들 수 있는 방법은 총 2가지이다.
제한 조건
- 3 <= number의 길이 <= 13
- -1,000 <= number의 원소 <= 1,000
- 서로 다른 학생의 정수 번호는 같을 수 있다.
입출력 예시
접근 방식
- 입력값: 정수 배열 / 출력값: 배열의 요소 3개의 합이 0이 나오는 경우의 수
- 배열의 모든 경우의 수를 계산한다.
2-1. 첫번째 요소 < 두번째 요소 < 세번째 요소 이기 때문에,
더할 삼총사의 초기값을 각각 index[i]
, index[i+1]
, index[i+2]
로 설정한다.
2-2. 중첩 반복문을 사용하여 경우의 수를 계산한다. (예제 참고)
- [예제]
5개의 요소(각 index = [0,1,2,3,4]) 중 3개를 구하는 경우의 수
- 첫번째 요소 index[0], 두번째 요소 index[1]인 경우 : [0,1,2], [0,1,3], [0,1,4]
- 첫번째 요소 index[0], 두번째 요소 index[2]인 경우 : [0,2,3], [0,2,4]
- 첫번째 요소 index[0], 두번째 요소 index[3]인 경우 : [0,3,4]
- 첫번재 요소 index[1], 두번째 요소 index[2]인 경우 : [1,2,3], [1,2,4]
- 첫번재 요소 index[1], 두번째 요소 index[3]인 경우 : [1,3,4]
- 첫번재 요소 index[2], 두번째 요소 index[3]인 경우 : [2,3,4]
- 경우의 수에서의 합산 결과가 0이 나올 때마다 결과값을 1씩 증가시킨다.
해결 방법
- for문을 사용하여 첫번째 요소를 배열의 끝까지 반복한다.
- 중첩 for문을 사용하여 두번째 요소를 배열의 끝까지 반복한다.
- 중첩 for문을 사용하여 세번째 요소를 배열의 끝까지 반복한다.
- 첫번째 요소 + 두번째 요소 + 세번째 요소 === 0 일 때마다 answer++을 수행한다.
- 최종 answer를 출력한다.
코드
function solution(number) {
let answer = 0;
for (let i = 0; i < number.length; i++) {
for (let j = i + 1; j < number.length; j++) {
for (let k = j + 1; k < number.length; k++) {
if (number[i] + number[j] + number[k] === 0) answer++;
}
}
}
return answer;
}
주요 개념