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

John·2022년 11월 4일
1

코테 메모🌼

목록 보기
8/28
post-thumbnail

문제 설명

레벨 : 1

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


제한 사항

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

풀이

package programmers;

import java.util.ArrayList;
import java.util.Arrays;

public class 소수만들기 {

	public static void main(String[] args) {
		// result = 4
		int[] nums = {1,2,7,6,4};
		solution(nums);
	}
	
	/**
	 * @date 2022-11-03
	 * 
	 * nums에 들어있는 숫자의 개수는 3개 이상 50개 이하
	 * nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
	 * 
	 * @param nums 숫자들이 들어있는 배열
	 * @return 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수
	 */
	public static int solution(int[] nums) {
		
		int answer = 0;
		
		// 오름차순 정렬
		Arrays.sort(nums);
		int maxNumber = nums[nums.length-3] + nums[nums.length-2] + nums[nums.length-1];
		
		ArrayList<Integer> primeNumbers = getPrimeNuber(maxNumber);
		
		for(int i=0; i<nums.length; i++) {
			int number = 0;
			for(int j=i+1; j<nums.length; j++) {
				for(int k=j+1; k<nums.length; k++) {
					number = nums[i] + nums[j] + nums[k];
					
					answer = primeNumbers.contains(number) == true ? answer  + 1 : answer;
				}
			}
		}
		
		System.out.println(answer);
        return answer;
    }
    
    /**
     * 1부터 number까지의 소수들을 포함한 primNumbers를 return
     * 
     * @param number 
     * @return primeNumbers
     */
    public static ArrayList<Integer> getPrimeNuber(int number) {
    	ArrayList<Integer> primeNumbers = new ArrayList<>();
    	
    	// 소수 == true ? false : true
    	boolean[] prime = new boolean[number+1];
    	
        // 1은 소수가 아니므로 제외
        prime[0] = prime[1] = true;
        
        for(int i=0; i*i<=number; i++) {
        	if(prime[i] == false){
            	for(int j=i*i; j<=number; j+=i) {
            		prime[j]=true;                
            	}
            }    
        }
        
        for(int i=1; i<=number;i++){
        	if(prime[i] == false) {
        		primeNumbers.add(i);     
        	}
        }
        
    	return primeNumbers;
    }
    
}

끄적끄적

  • number 변수를 입력했을 때, 1부터 number까지 소수들을 포함한 ArrayList를 return하는 메소드 생성
  • nums 를 정렬하여 만들 수 있는 가장 큰 수를 maxNumber로 지정
  • 포함여부 확인

결과


느낀점

간단간단 뚝딱뚝딱😍

profile
기록을 습관으로

0개의 댓글