[프로그래머스] (lv.1) 소수 만들기 (java)

0

코딩테스트

목록 보기
17/37
post-thumbnail

<문제>

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

<나의 풀이>

import java.util.ArrayList;
class Solution {
    public int solution(int[] nums) {
        ArrayList<Integer> list = new ArrayList<>();    // 소수 담아줄 리스트

        // 1. 뽑기
        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++) {
                    int temp = nums[i] + nums[j] + nums[k];
                    if (temp % 2 != 0)
                        list.add(temp);
                }
            }
        }

        // 2. 소수 판별
        int answer = list.size();
        for (int n : list) {
            for (int i = 3; i < n; i += 2) {
                if (n % i == 0) {
                    answer --;
                    break;
                }
            }
        }
        return answer;
    }
}

<다른 사람의 풀이>

import java.util.Arrays;

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;
    }
}

<핵심 개념>

3가지 수 뽑는 방법하고 소수 판별 부분을 알아둬야 쉽게 풀 수 있다.
소수 판별 알고리즘 잘 기억해두자.
근데 이거 레벨 1 맞냐 왤케어렵니..

소수 판별 알고리즘 참고 : https://st-lab.tistory.com/81

profile
두둥탁 뉴비등장

0개의 댓글