소수 만들기

J·2021년 4월 7일
0

코딩테스트 연습

목록 보기
25/28

import java.util.*;

class Solution {
    //같은 결과 여러가지 방법 중복허용
    public int solution(int[] nums) {
        int answer = -1;
        
        ArrayList<Integer> n = new ArrayList<>();
       
        for(int i=0;i<nums.length-2;i++){
            for(int j=i+1;j<nums.length-1;j++){
                for(int k=j+1;k<nums.length;k++){
                    n.add(nums[i]+nums[j]+nums[k]);
                    //System.out.print(nums[i]+nums[j]+nums[k]+" ");
                }
            }
        }
        
        //n[i]가 소수인지 판별
        int cnt = 0;
        for(int i=0;i<n.size();i++){
            boolean flag = true;
            
            for(int j=2;j<=Math.sqrt(n.get(i));j++){
                if(n.get(i)%j==0) flag = false;
            }
            if(flag == true) cnt++;
        }
        
        answer = cnt;
        return answer;
    }
}

세 수를 더한값을 새로운 배열에 추가하려고 할 때 배열크기를 몇으로 정할 지 아래의 공식을 찾아보는 등 고민을 하다가..
배열크기를 정하지 않는 list를 이용 하였다.

n개중에 m개를 뽑을 때 경우의 수

1/( (n-m)! * m! )

다른사람은 배열을 만들 지 않고 메소드를 만들어서 이용하였는데 신박.

class Solution {



    public int solution(int[] nums) {
        int ans = 0;

        for(int i = 0; i < nums.length - 2; i ++){
            for(int j = i + 1; j < nums.length - 1; j ++){
                for(int k = j + 1; k < nums.length; k ++ ){
                    if(isPrime(nums[i] + nums[j] + nums[k])){
                        ans += 1;  
                    } 
                }
            }
        }
        return ans;
    }
    public Boolean isPrime(int num){
        int cnt = 0;
        for(int i = 1; i <= (int)Math.sqrt(num); i ++){
            if(num % i == 0) cnt += 1; 
        }
        return cnt == 1;
    }
}

0개의 댓글