순간을 기록으로

[Java] 소수만들기 본문

Problem Solving

[Java] 소수만들기

luminous13 2022. 1. 13. 14:06

문제

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

 

코딩테스트 연습 - 소수 만들기

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

programmers.co.kr

 

주의할 점

소수란. 1과 자기 자신으로만 나누어 질 수 있는 자연수이다. 예를들어 7은 1과 7로만 나눠질 수 있다.(= 1과 7로 나눴을 때 나머지가 0이다, 2, 3, 4, 5, 6으로는 나눠질 수 없다.) 그럼 자연수 N(N>=3)이라고 했을 때 N이 소수인지 판별하려면 2부터 N-1까지 모든 자연수를 확인해야 할까? 아니다. 절반까지만 확인하면 된다. N=100이면 N/2(=50) 즉 절반이 넘어가게 되면 나누어 떨어질 수 없다. 따라서 절반 이하만 확인하면 된다. 

 

배열에서 3개의 카드를 골라야 하므로 3중 for문을 사용한다. 그리고 서로 다른 카드를 뽑아야 하기 때문에 j = i+1, k=j+1으로 작성한다. 

 

 

 

코드

package 프로그래머스.레벨1.소수만들기;

public class Solution {
    public int solution(int[] nums) {
        int answer=0;
        int sum;

        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++) {
                    sum = nums[i] + nums[j] + nums[k];
                    if (isPrime(sum))
                        answer++;
                }
            }
        }

        return answer;
    }

    private boolean isPrime(int num) {
        if (num < 2)    // 0, 1
            return false;
        else if (num == 2)  // 2이면 소수니깐
            return true;
        else {  // 3이상이면
            for (int i=2; i<num/2; i++) {
                if (num%i == 0) // 나머지가 0이면 나눠진다는 말이므로
                    return false;
            }
            return true;    // 나눠지는게 없었으므로 소수
        }
    }

    public static void main(String[] args) {
        Solution s = new Solution();

        int[] nums1 = {1, 2, 3, 4};
        System.out.println(s.solution(nums1));

        int[] nums2 = {1, 2, 7, 6, 4};
        System.out.println(s.solution(nums2));
    }
}

 

느낀점

대충 감으로 이렇게 되겠지 말고 이해가 되지 않는다면 디버깅을 하면서 구체적으로 어떤식으로 돌아가는지 확인하자

'Problem Solving' 카테고리의 다른 글

[Java] 회의실 배정  (0) 2022.01.14
[JAVA] 체육복  (0) 2022.01.14
[Java] 없는 숫자 더하기  (0) 2022.01.13
[Java] 키패드 누르기  (0) 2022.01.13
[Java] 공주구하기  (0) 2022.01.12
Comments