프로그래머스 - 소수 만들기(java)

응큼한포도·2023년 11월 4일

코딩테스트

목록 보기
7/31
public class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        boolean[] primeArr = new boolean[3000];

        for (int i = 0; i < primeArr.length; i++) {
            primeArr[i] = true;
        }

        primeArr[0] = primeArr[1] = false;

        for (int i = 2; i < 3000; i++) {
            if (primeArr[i]) {
                for (int j = i * i; j < 3000; j += i) {
                    primeArr[j] = false;
                }
            }
        }

        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                for (int k = j + 1; k < nums.length; k++) {
                    int sum = nums[i] + nums[j] + nums[k];
                    if (primeArr[sum]) {
                        answer++;
                    }
                }
            }
        }

        return answer;
    }
}

3개의 합은 3000을 넘지 않으니 에라토스테네스 체를 이용해서 3000까지의 소수를 구해준다. 파이썬과 달리 자바는 3개의 조합을 직접 루프를 이용해 구해주고 합을 체에 넣어서 소수면 answer에 1씩 더해 개수를 구한다.

0개의 댓글