본문 바로가기
코딩 테스트/알고리즘(Java)

[프로그래머스/Lv.1] 삼총사

by KeepCoding 2025. 1. 16.

<문제>

 

 

 

[접근방식]

 

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;
    }
}

 

 

반응형