<문제>
[접근방식]
3중 for문 말고 two pivots방식으로 접근 해봤다.
1) 인덱스 i 부터 시작해서 pivot1은 i +1 위치에, pivot2는 마지막 인덱스 위치(numberLength - 1)부터 시작해서 pivot2를 하나씩 앞 인덱스로 움직이며 합이 0인 조합을 찾는다.
2) pivot1이 numberLength -1에 도착하면 while문을 멈추고 i인덱스를 하나 증가한다.
3) 이때 i인덱스값 + pivot인덱스값 이 가장큰 숫자를 가르키는 pivot2값 보다 작다면 더이상 pivot2를 움직여서 비교하는게 의미가 없어지니 ++pivot1, pivot2은 제일 끝 인덱스로 옮겨주고 계속진행한다. (오름차순 정렬을 한 이유)
<코드>
import java.util.Arrays;
class Solution {
public int solution(int[] number) {
int answer = 0;
int numberLength = number.length;
Arrays.sort(number);
for(int i = 0; i < numberLength - 2; i++) {
if(number[i] > 0) break;
int pivot1 = i + 1;
int pivot2 = numberLength - 1;
while(pivot1 != numberLength - 1) {
if(pivot1 == pivot2) {
++pivot1;
pivot2 = numberLength - 1;
continue;
}
int sum = number[i] + number[pivot1] + number[pivot2];
if(sum < 0) {
++pivot1;
pivot2 = numberLength - 1;
continue;
}
else if(sum == 0) { ++answer; }
--pivot2;
}
}
return answer;
}
}
반응형
'코딩 테스트 > 알고리즘(Java)' 카테고리의 다른 글
[프로그래머스/Lv.1] 최소직사각형 (0) | 2025.01.23 |
---|---|
[프로그래머스/Lv.2] 짝지어 제거하기 (1) | 2025.01.21 |
[프로그래머스/Lv.2] 다음 큰 숫자 (0) | 2025.01.16 |
[프로그래머스/Lv.1] 3진법 뒤집기 (0) | 2025.01.16 |
[프로그래머스][Lv.1]문자열을 정수로 바꾸기 (0) | 2025.01.11 |