SMALL
https://programmers.co.kr/learn/courses/30/lessons/12977?language=java
배열 내의 숫자를 임의로 3개를 뽑아 소수가 되는지 확인하는 작업이다. (중복 허용하지 않음)
따라서 이 문제를 배열 내 숫자 중 3개를 조합으로 뽑고, 소수를 판별하는 부분으로 나누어 풀었다.
package com.company;
import java.lang.reflect.Array;
import java.util.*;
import java.util.stream.Stream;
public class Main {
static int total = 0;
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4};
int[] bucket = new int[3];
pick(nums, bucket, bucket.length);
System.out.println(total);
}
//임의의 k개를 조합으로 뽑는 함수
//bucket의 길이만큼 뽑는다.
public static void pick(int[] nums, int[] bucket, int k) {
if(k == 0) {
if(isPrime(Arrays.stream(bucket).sum())) {
total++;
}
return;
}
int lastIdx = bucket.length - k - 1;
for(int i = 0; i < nums.length; i++) {
if(bucket.length == k) {
bucket[0] = nums[i];
pick(nums, bucket, k - 1);
} else if(bucket[lastIdx] < nums[i]) {
bucket[lastIdx + 1] = nums[i];
pick(nums, bucket, k - 1);
}
}
}
//소수 판별
//Math.sqrt를 활용하여 더 빠른 판별이 가능하다.
public static boolean isPrime(int n) {
for(int i = 2; i <= (int)Math.sqrt(n); i++) {
if(n % i == 0) {
return false;
}
}
return true;
}
}
Arrays.stream(bucket).sum()
-> bucket의 내부 내용을 모두 더하는 스트림을 활용하여 구현했다.
SMALL
'기록 > 알고리즘' 카테고리의 다른 글
[Programmers][Java] 실패율 (0) | 2022.05.23 |
---|---|
[Java] Builder 패턴 (0) | 2022.03.31 |
[카카오] 신고 결과 받기 (0) | 2022.02.26 |
[백준][JAVA] 큰 수 A+B (0) | 2021.12.19 |
[Programmers] [JAVA] 더 맵게 (0) | 2021.11.05 |