본문 바로가기
코딩테스트/프로그래머스 1단계

프로그래머스 1단계 - 소수 만들기

by SICDev 2021. 4. 28.
반응형

https://programmers.co.kr/learn/courses/30/lessons/12977

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

 

//nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return하라!!
//{1, 2, 3, 4} 가 잇으면 -> {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4} 총 4개의 경우의 수가 나오고 이 중 {1,2,4}가 7 이기에 소수이다.
class Solution {
    int answer = 0;
    public int solution(int[] nums) {
        int sum = 0;
        //첫번째 인덱스는 맨마지막의 인덱스까지 가지 않는다 왜?? 총 3개의 숫자를 뽑기때문에 맨 마지막 인덱스의 -2번째 까지만 선택한다..!
        //ex) {1,2,3,4,5} 의 모든 경우의수 중 순차적으로 3개의 숫자를 뽑을때 맨 마지막 경우의수는 {3,4,5}가 될것이다.
        //이때 nums.length = 4일것이고 첫번째는 숫자는 3이 뽑아져나와야하니까 인덱스는 4-2 =2 인 nums[2]가 될것이다.  
        for(int i=0; i<nums.length-2; i++){
            //시작은 i와 겹치면 안되니때문에 i+1번째 인덱스부터 뽑아온다..!
            //두번째 인덱스도 맨마지막의 인덱스까지 가지 않는다..! 이것도 마찬가지로 총 3개를 뽑기 때문에 맨 마지막 인덱스의 -1번째 까지만 선택하게된다..!
            //ex) {1,2,3,4,5} 의 모든 경우의수 중 순차적으로 3개의 숫자를 뽑을때 맨 마지막 경우의수는 {3,4,5}가 될것이다.
            //이때 nums.length = 4일것이고 두번째는 숫자는 4이 뽑아져나와야하니까 인덱스는 4-1 =3 인 nums[3]가 될것이다.
            for(int j=i+1; j<nums.length-1; j++){
                //시작은 i, j와 겹치면 안되기때문에 j+1번째 인덱스부터 뽑아온다..!
                for(int k=j+1; k<nums.length; k++){
                    //세개의 숫자를 더한다..!
                    sum = nums[i]+nums[j]+nums[k];
                    //소수를 찾아야한다..!
                    //소수의 정의가 무엇인가...약수가 1과 자기자신으로 되어있어야하지 않은가..
                    //1과 자기자신을 제외하고 두 사이에 있는 숫자로 자기자신을 나누었을때 나머지가 0이 아니면 소수다..(맞나..?)
                    sosuCount(sum);
                }
            }
        }
        return answer;
    }

    //소수인지 아닌지 판별한다.
    public void sosuCount(int sum){
        boolean check = false;
        for(int i=2; i<=sum-1; i++){
            if(sum%i == 0){
                //이 if문에 한번이라도 들어오면 소수가 아니기 때문에 반복문을 나간다..!
                check = true;
                break;
            }
        }
        if(!check){
            answer++;
        }
    }
}
반응형