-
[프로그래머스] 소수 만들기알고리즘 2023. 8. 25. 20:13
문제
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때,
nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
풀이
먼저 소수가 되는 조건을 찾아보려고 하였다.
소수 + 소수는 소수가 되는가?? 아니다.소수 + 합성수는 소수가 되는가?? 그것도 아니다.
여러 생각들을 해보았는데, 역시 아무런 규칙이 없다.
따라서 이건 전수조사를 해야 한다고 생각을 하였다.주어진 nums배열에서 3가지의 수를 더한 후 소수인지판별을 모든 조합을 따져야 한다.
배열에서 3가지 배열을 고르는 로직을 백트래킹을 이용하여 구현하였고, 그렇게 구한 sum을 소수인지 판별하도록 하였다.import java.util.*; import java.lang.*; class Solution { static int sum = 0; static int answer = 0; public int solution(int[] nums) { boolean[] visited = new boolean[nums.length]; chooseNum(nums, visited, 0, 0); return answer; } static void chooseNum(int[] nums, boolean[] visited, int start, int depth) { if (depth == 3) { if (check()) { answer++; } return; } for(int i = start; i < nums.length; i++) { if (!visited[i]) { visited[i] = true; sum += nums[i]; chooseNum(nums, visited, i + 1, depth + 1); visited[i] = false; sum -= nums[i]; } } } static boolean check() { for(int i = 2; i < sum; i++) { if (sum % i == 0) { return false; } } return true; } }
728x90'알고리즘' 카테고리의 다른 글
[프로그래머스] 없는숫자 더하기 (0) 2023.09.01 [프로그래머스] 비밀지도 (0) 2023.08.28 [프로그래머스] 다트게임 (0) 2023.08.24 [프로그래머스] 파일명 정렬 (0) 2023.08.22 [프로그래머스] 옹알이(1) (0) 2023.08.20