해당 문제는 3중 for문을 통해서 구현한 문제입니다.
해당 문제를 풀때 3중 for문까지 돌릴 생각이 나질 않아서, 결국 풀지 못했습니다.
처음에는 3중 for문을 돌리게되면, [ -2, 0, 2 ] 와 [ 2, 0, -2] 의 경우에 횟수가 중복되어 카운팅 되지 않을까라는 고민도 했지만,
사실 for문을 다음과 같이 구현하면 이전에 카운팅했던 케이스가 다시 나올 일은 없습니다.
int len = 정수;
for(int i=0; i<len-2; i++){
for(int j=i+1; j<len-1; j++){
for(int k=j+1; k<len; k++){
}
}
}
// 012, 013, 014, 015, 022, 023, 024, 025, 032 ...
위 주석처럼 한번 확인한 케이스에 대해서는 다시 확인하는 일이 없기 때문에 확실하게 확인이 가능합니다.
위 문제의 입출력 예를 들어 설명하면, 다음과 같습니다.
input
number = [-2,3,0,2,-5] => output : 2
//3중 for문
...
(-2,3,0) (-2,3,2) (-2,3,0) (-2,3,-5) (-2,0,2) (-2,0,-5) (-2,2,-5)
(3,0,2) (3,0,-5) (3,2,-5) (0,2,-5)
class Solution {
public int solution(int[] number) {
int answer = 0;
int len = number.length;
for(int i=0; i<len-2; i++){
for(int j=i+1; j<len-1; j++){
for(int k=j+1; k<len; k++){
int sum = number[i] + number[j] + number[k];
if(sum == 0){
answer++;
}
}
}
}
return answer;
}
}