[Programmers] 소수 만들기(JAVA)

Lee 🧙🏻‍♂️·2021년 7월 28일
0
post-thumbnail

📄 문제 설명

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

📑 제한 사항

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

👨🏻‍💻 내가 작성한 code

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int sum = 0;
		boolean flag = false; // true = 소수가 아님!!
		 for(int i = 0; i < nums.length - 2; i++){
			 
	            for(int o = i + 1; o < nums.length - 1; o++){
	            	
	                for(int p = o + 1; p < nums.length; p++){
	                	sum = nums[i] + nums[o] + nums[p];
	           		 	flag = false;
	                	for(int j = 2; j <= sum -1; j++) {
	                		if(sum % j == 0) {
	                			flag = true;
	                			break;
	                		}
	                	}
	                	if(flag == false) {
	                		answer += 1;
	                	}
	                	
	                }
	            }
	        }

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

        return answer;
    }
}

👨🏻‍🏫 풀이 과정

일단 이 문제를 해결하려면 소수를 알아야 풀 수 있다.
소수란 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다.

예를 들어 nums={1,2,3,4}의 값을 가지고 있다고 생각해 보면 경우의 수는 1,2,3 / 1,2,4 / 1,3,4 / 2,3,4 중에 더해서 소수가 되는 수를 찾으면 되는 것이다.

👊🏻첫 번째 for 문

length - 2를 한 이유는 i는 배열의 마지막 2개까지 돌릴 필요가 없는 것이다. i는 3게의 서로 다른 숫자들 중에 맨 앞에 오는 숫자이다. 즉 예시에서 보면 i= 1,2가 될 수 있다.

👊🏻두 번째 for 문

o = i + 1; o < nums.length - 1;를 한 이유도 첫 번째 for 문이랑 별다를 게 없다 o는 2,3이 둘 중 하나의 값이 나와야 하기 때문이다.

👊🏻세 번째 for 문

sum이라는 변수에 i + o + p를 해 주고 flag를 초기화해 둔다.

👊🏻네 번째 for 문

sum의 값이 소수인지 아닌지를 판단해 준다.
소수는 1과 자기 자신만을 약수로 가지기 때문에 2부터 시작해서 sum -1을 한 값을 계속 계산해 본다.

👊🏻if 문

sum % j == 0이라면 소수가 아니기 때문에 flag를 true로 만들어 주고 braek를 걸어 4번째 for 문을 빠져나간다. 만약 sum % j != 0이라면 마지막 if 문을 타서 answer의 값을 1씩 증가시켜준다.

profile
더 나은 개발자가 되기 위해 기록합세!🧙🏻‍♂️

0개의 댓글