본문 바로가기

programmers-코딩테스트 연습/Level 1. 자바

2021-06-01 / 소수 만들기

문제 설명

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

 

제한사항

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

입출력 예

nums result
[1, 2, 3, 4] 1
[1, 2, 7, 6, 4] 4

 

입출력 예 설명

입출력 예 #1

[1, 2, 4]를 이용해서 7을 만들 수 있다.

 

입출력 예 #2

[1,2,4]를 이용해서 7을 만들 수 있다.
[1,4,6]을 이용해서 11을 만들 수 있다.
[2,4,7]을 이용해서 13을 만들 수 있다.
[4,6,7]을 이용해서 17을 만들 수 있다.

 

초기 코드

class Solution {
    public int solution(int[] nums) {
        int answer = -1;

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("Hello Java");

        return answer;
    }
}

 

정답코드

더보기
class Solution {
    public int solution(int[] nums) {
        int answer = -1;
        answer=0;
        int sum=0;
        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++){
                    sum=nums[i]+nums[j]+nums[k];
                    if(check(sum)=="yes") answer++;
                }
            }
        }
        return answer;
    }
    String check(int sum){
        for(int i=2; i<sum/2; i++){
            if(sum%i==0) return "no";
        }
        return "yes";
    }
}

 

코드 설명

배열의 아무값이나 3개를 더해 소수를 구하기 때문에 3중 포문을 돌려 모든 경우의 수를 찾아준다. 이때 i, j, k의 초기값이 달라야 모든 경우의 수를 더해준다. 

소수는 약수가 1과 자기 자신만 있는 수이다. 때문에 2로 나눴을 때 나눠지는 수는 소수가 아니다. check 메서드의 return 타입이 String이므로 return 타입도 String이다. (boolean같은 타입도 괜찮다.) 

 

 

 

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

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

programmers.co.kr