문제 설명 및 제한사항

입출력 예

입출력 예시 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문을 여러번 돌리는게 정답인가 싶다.