Coding Test/JAVA 코딩테스트 풀이정리(프로그래머스)

프로그래머스 스쿨 Lv.1 - 소수만들기
깝몬 2023. 12. 13. 15:15
class Solution {
    public int solution(int[] nums) {
        int limit = nums.length;
        int answer = 0;
        int cursor1 = 0;
        int cursor2 = 1;
        int cursor3 = 2;
        
        while(cursor1<limit-2){
            while(cursor2<limit-1){
                while(cursor3<limit){
                    int numChk = nums[cursor1] + nums[cursor2] +nums[cursor3];
                    for(int i=2;i<=numChk;i++){
                        if(i==numChk){answer++;break;}
                        if(numChk%i==0){break;}
                    }
                    cursor3++;
                }
                cursor2++;
                cursor3=cursor2+1;
            }
            cursor1++;
            cursor2=cursor1+1;
            cursor3=cursor1+2;
        }
        return answer;
    }
}

 

숫자를 주어진 그룹에서 3개를 고른 후 그것의 합이 소수 인 경우에 answer가 1늘어나는 구조이다.

 

이때 모든 경우의수를 더해보기 위해

 

자리수를 3개로 정해둔 후 그것을 각각 커서1,2,3으로 정했다.

 

예를 들어 숫자가 5개일때 검사하는경우의수는 5C3으로 10가지 이지만 그것을 하나하나 검색하는 로직은

 

 

0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4

 

이와 같다. 첫번째 자리를 0으로 고정 한 후 두번째자리를 1로 고정한다.

 

그리고 세번째 자리를 끝까지 탐색 한 후

 

두번째자리를 1 증가시킨 후 세번째자리를 두번째자리보다 1큰 숫자로 정해준 후 다시 탐색

 

두번째자리가 마지막숫자보다 1 작을 경우 탐색을 마친뒤

 

첫번째 자리를 증가시킨후 두번째자리를 그것보다1, 세번째자리를 그것보다 2 크게 정해 준 후 탐색을 반복한다.