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

최지나·2023년 10월 20일
0

코딩테스트

목록 보기
46/154

문제

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

제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

입출력 예

numsresult
[1,2,3,4]1
[1,2,7,6,4]4

문제 출처

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

생각

  • 3개의 숫자를 중복 없이 뽑아 더해 합을 구하고, prime number인지 판단하는 함수로 체크해서 소수의 수를 count
  • 소수인지는 2부터 n 직전까지 1씩 증가하면서 나누어 떨어지는 수가 없는지를 확인

코드

import java.util.*;

class Solution {
    public int solution(int[] nums) {

        int cnt = 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++){
                    int sum = nums[i] + nums[j] + nums[k];
                    if (isPrime(sum)) cnt++;
                }
            }
        }
        return cnt;
    }
    
    public boolean isPrime(int n){
        boolean prime = true;
        for (int i = 2;  i < n; i++){
            if (n % i == 0){
                prime = false;
                break;
            }
        }
        return prime;
    }
}

다른 사람의 풀이

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;
    }
}
  • 메소드 명까지,, 굉장히 유사한 풀이었다 😮😮
  • 다만 다른 점이 있다면 나누어 떨어지는 수가 있는지 확인헤서 소수인지를 확인하는 과정에서 (int)Math.sqrt(num) 여기까지만 체크한 점이 달랐다
  • 불필요한 반복문을 없애는 것 뿐만 아니라 반복문의 범위까지도 생각해봐야겠다,, !!
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글