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

[프로그래머스] 소수 만들기(Java)

by 진진리 2023. 10. 13.
728x90
  • 첫 코드
class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int len = nums.length;
        int flag = 1;
        
        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 = nums[i] + nums[j] + nums[k];
                    for(int m=2;m<sum;m++){
                        if(sum%m==0){
                            flag = 0;
                            break;
                        }
                    }
                    if(flag==1) answer++;
                    flag = 1;
                }
            }
        }

        return answer;
    }
}

 

  • 소수인지 확인하는 부분에서 m<=(int)Math.sqrt(sum) 으로 수정했더니 걸리는 시간이 크게 향상됨
                    for(int m=2;m<=(int)Math.sqrt(sum);m++){
                        if(sum%m==0){
                            flag = 0;
                            break;
                        }

 

  • 유지보수성이 좋은 코드: 소수 확인 부분을 함수로 분리
class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int len = nums.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 = nums[i] + nums[j] + nums[k];
                    if(IsPrime(sum)) answer++;
                }
            }
        }

        return answer;
    }
    
    public boolean IsPrime(int n) {
        for(int i=2;i<=(int)Math.sqrt(n);i++){
            if(n%i==0) return false;
        }
        return true;
    }
    
}