코딩테스트
[JS] 연습문제 > 삼총사
차차한
2024. 9. 4. 15:55
처음 문제를 봤을 때
단순하게 반복을 돌려 값을 더하면 된다는 생각을 했었는데 number의 길이만큼 반복문을 다 써줘야하는건가 하고 착각을 해서 조금 헤맸던 문제
삼총사니까 3개의 값만 더해주면 되니 반복문은 총 3번만 필요하다.
number가 [-2, 3, 0, 2, -5] 라 했을 때 삼총사를 찾기 위해 a,b,c 값이 필요하다고 보자
0번 인덱스 값인 -2를 a를 두고
그 다음 인덱스인 1번 인덱스 값인 3을 b의 값으로 두고
그 다음다음 인덱스인 2번 인덱스 값인 0을 c의 값으로 두고 더하면
a+b+c의 값은 1이 되니 삼총사가 되지 않는다.
a,b는 그대로 두고 c의 값만 인덱스를 올려보면
3번 인덱스 값인 2를 c의 값으로 두고 계산하면
-2 + 1 + 2 이니까 이때도 삼총사가 되지 않는다.
암튼 이런 식으로 a는 기준, b는 a보다 1 큰 인덱스 값, c는 b보다 1이 큰 인덱스의 값이 들어간다고 보고 반복문을 만들면 답이 나온다
function solution(number) {
var 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;
}
다른 사람의 풀이 중에 length를 각각 -2, -1씩 넣은 풀이도 있다.
function solution(number) {
var answer = 0;
for(let i =0; i < number.length-2; i++){
for(let j = i+1; j < number.length-1; j++){
for(let k = j+1; k < number.length; k++){
const sum = number[i] + number[j] + number[k]
if(sum === 0) answer++
}
}
}
return answer;
}
3개 값만 더할 수 있으니 굳이 i를 number의 길이만큼 돌릴 필요는 없기 때문에
내가 푼 문제도 정답으로 처리되긴 했지만 길이에 제한을 둔 답이 좀더 정확하다고 생각이 든다.