문제
코드
isPrime 함수는 백준 골드바흐를 풀때 썼던 것과 동일 (링크에는 TIL 속 작은 골드바흐가 있다.)
class Solution {
static int answer = 0;
static void combination(int[] arr, boolean[] visited, int start, int r) {
if(r == 0) {
int sum = sum(arr, visited);
if(isPrime(sum))
answer++;
return;
}
for(int i=start; i<arr.length; i++) {
visited[i] = true;
combination(arr, visited, i + 1, r - 1);
visited[i] = false;
}
}
static int sum(int[] arr, boolean[] visited) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if (visited[i]) {
sum += arr[i];
}
}
return sum;
}
static boolean isPrime(int n) {
if (n == 1) /* 1은 소수가 아니므로 제외 */
return false;
else if (n == 2)
return true;
/* 2부터 루트(tmp)+1 까지 */
for (int j = 2; j < (int) Math.sqrt(n) + 1; j++)
if (n % j == 0)
return false;
return true;
}
public int solution(int[] nums) {
boolean[] visited = new boolean[nums.length];
combination(nums, visited, 0, 3 );
return answer;
}
}
큰일났다...조합 어떻게 구할지 계속 생각해도 머리가 안돌아가서 결국 찾아봤다. (참고한 블로그)
삼중for문은 하기 싫었고ㅜ
문제는 찾아보지 않았지만 아주 당황스럽다. 알고리즘에 시간투자를 더 해야겠다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스/JAVA] LV1 - 비밀지도 / JAVA (0) | 2022.04.19 |
---|---|
[프로그래머스/JAVA] LV1 - 로또의 최고 순위와 최저 순위 / JAVA (0) | 2022.04.01 |
[프로그래머스/JAVA] LV1 - 음양 더하기 (0) | 2022.03.11 |
댓글