Coding Test/Coding Test 문제 풀이

프로그래머스 (Level 1) - 소수 만들기

임빈영 2021. 12. 26. 16:16
문제 설명
 

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

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

programmers.co.kr

 

풀이

주어진 정수형 배열 nums에서 임의의 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하는 문제이다.

 

우선, 정수형 배열 nums에서 완전 탐색 기법을 사용해서 3개의 숫자로 구성할 수 있는 모든 조합을 탐색하였다. 3개의 숫자 조합을 탐색할 때마다 3개 숫자의 합을 구하고, 구한 숫자가 소수인지 아닌지 판별 함으로써 문제를 해결하였다.

 

전체 소스코드
import java.io.*;
import java.util.*;

public class Solution05 {
	static int[] numbers;
	static boolean[] visited;
	static int[] arr = new int[3];

	static int answer = 0;

	public int solution(int[] nums) {
		numbers = nums;
		visited = new boolean[nums.length];

		dfs(0, 0);

		return answer;
	}

	/** 3개의 숫자로 구성할 수 있는 모든 조합을 탐색 */
	static void dfs(int start, int depth) {
		if (depth == 3) {
			int target = 0;

			for (int number : arr)
				target += number;

			if (isTrue(target))
				answer++;

			return;
		}

		for (int i = start; i < numbers.length; i++) {
			if (visited[i] == false) {
				visited[i] = true;

				arr[depth] = numbers[i];
				dfs(i, depth + 1);

				visited[i] = false;
			}
		}
	}

	/** 소수를 판별하는 메서드 */
	static boolean isTrue(int target) {

		for (int i = 2; i <= target / 2; i++) {
			if (target % i == 0)
				return false;
		}

		return true;
	}
}

 

728x90