문제풀이/프로그래머스

소수 만들기 / 프로그래머스 연습문제 / programmers / level1 / java

RUCKUS 2021. 5. 3. 10:00

 

programmers.co.kr/learn/courses/30/lessons/12977

 

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

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

programmers.co.kr

이번 문제도 소수 관련 문제다.

근데 단순히 소수냐 아니냐 보다는 경우의 수가 난 더 중요하게 느껴졌다.

 

주어지는 배열에서 3가지의 숫자가 얼마만큼 조합이 되는지를 알아야하기 때문이다.

 

포문으로 해야 될 것 같다 까지는 알겠는데, 어떻게 구현할지 많이 애를 먹었다.

 

약 2시간 머리를 쓴 결과

그 결과 나의 코드

public static void main(String[] args) {
		int[] nums = {1, 2, 6, 7, 4};
		
		solution(nums);
	}
	
	    public static int solution(int[] nums) {
	    	int answer = 0;
	    	
	    	// 3중 포문으로 3개씩 더할 수 있는 모든 경우의 수를 구해준다.
	    	
	    	for (int i = 0; i < nums.length-2; i++) {
	    	// 3개씩 더해야 하니 첫 번째 포문은 배열 길이의 -2번만 돌릴거다. 그럼 여기서는 0,1,2 까지 총 3번 반복한다.
				for (int j = i+1; j < nums.length-1; j++) {
				// 2번째 포문은 첫번째 포문 시작 점+1부터 배열 길이의 -1번 만 돌릴거다. 그럼 여기서는 1,2,3 까지 총 3번 반복한다.
					for (int k = j+1; k < nums.length; k++) {
					// 3번째 포문은 두번째 포문 시작점 +1부터 배열 길이까지 돌릴거다. 그럼 여기서는 2,3,4 까지 총 3번 반복한다.
						int temp = nums[i] + nums[j] + nums[k];

						System.out.println("i : " + i + " j : " + j + " k : " + k);
						
						if (primeCheck(temp)) {
							answer++;
						}

					}
				}
			}
	    	System.out.println(answer);
	        return answer;
	    }
	    
		public static boolean primeCheck(int n) {
			// 소수 판별
			boolean prime = true;
				for (int i = 2; i < n; i++) {
					if (n % i == 0) {
						prime = false;
						break;
					}
				}		
			return prime;
		}

소수를 판별하는건 이전에 해봐서 어렵지 않았다.

포문을 통해 배열의 사이즈와 초기값들을 통해서 경우의 수 만큼 명령문을 돌릴 수 있다는 걸 깨달았다.

 

경우의수...넘싫..ㅠ

 


[깃허브]

https://github.com/RUCKUSJERRY/practiceOfJava/blob/main/Prs_Pratice/src/com/level01/createPrimeNum.java

 

RUCKUSJERRY/practiceOfJava

Contribute to RUCKUSJERRY/practiceOfJava development by creating an account on GitHub.

github.com