-
[프로그래머스] 소수 만들기Algorithm 2020. 9. 15. 12:25반응형
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
import java.util.*; class Solution { static ArrayList<Integer> num = new ArrayList<>(); public int solution(int[] nums) { boolean[] visited = new boolean[nums.length]; combination(nums, visited, 0, nums.length, 3); return answerDecimal(num); } public void combination(int[] arr, boolean[] visited, int depth, int n, int k) { if (k == 0) { num.add(sum(arr, visited, n)); return; } if (n != depth) { visited[depth] = true; combination(arr, visited, depth + 1, n, k - 1); visited[depth] = false; combination(arr, visited, depth + 1, n, k); } } int sum(int[] arr, boolean[] visited, int n) { int sum = 0; for (int i = 0; i < n; i++) { if (visited[i]) sum += arr[i]; } return sum; } int answerDecimal(ArrayList<Integer> num) { int decimal = 0; for (int i : num) { boolean isPrime = true; for (int j = 2; j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) decimal++; } return decimal; } }
조합을 사용하여 배열에 담긴 숫자를 3개 뽑아서 더해 만들 수 있는 숫자를 다 구한 다음
그 숫자 들중 소수를 찾아 풀이를 하였다.
처음에는 Set으로 3개를 더한 숫자 중 중복을 없앴지만 테스트 케이스가 실패를 하길래
ArrayList로 바꿔 주었다.
반응형'Algorithm' 카테고리의 다른 글
[프로그래머스] 탑 (0) 2020.09.15 [프로그래머스] 스킬 트리 (0) 2020.09.15 [프로그래머스] 캐시 (0) 2020.09.15 [프로그래머스] 체육복 (0) 2020.09.15 [프로그래머스] 같은 숫자는 싫어 (0) 2020.09.15