프로그래머스 소수 만들기 [Java]
문제출처
https://programmers.co.kr/learn/courses/30/lessons/12977
import java.util.Arrays;
class Solution {
int answer = 0;
public int solution(int[] nums) {
int[] bucket = {0, 0, 0};
select(nums, bucket, 0, 0);
return answer;
}
public void select(int[] nums, int[] bucket, int now, int k){
if(k > 3) {return;}
if(k == 3){
int sum = 0;
for(int i = 0; i < 3; i++){
sum += bucket[i];
}
if(check(sum)){
System.out.println(Arrays.toString(bucket) + "를 이용해서 " + sum + "을 만들 수 있습니다.");
answer++;
}
return;
}
for(int i = now; i < nums.length; i++){
bucket[k] = nums[i];
select(nums, bucket, i + 1, k + 1);
}
}
public boolean check(int sum){
for(int i = 2; i < sum; i++){
if(sum % i == 0){
return false;
}
}
return true;
}
}
어떻게든 풀었지만 시간이 엄청났다... 당연함 재귀에 소수 판별하는 과정까지... 길수밖에 없다.
사실 조합 함수가 필요없다는 생각이 드는게 뽑아햘 것의 개수가 3개로 딱 정해져있기에 이렇게까지 할 필요가 없어보인다.
다른 사람 풀이를 보니 for문을 3개써서 하는 방식으로 했던데 그게 훨씬 시간 절약도 되는거 같다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
프로그래머스 K번째수 [Java] (0) | 2022.02.23 |
---|---|
프로그래머스 완주하지 못한 선수 [Java] (0) | 2022.02.22 |
프로그래머스 크레인 인형뽑기 게임 [Java] (0) | 2022.02.18 |
프로그래머스 키패드 누르기 [Java] (0) | 2022.02.15 |
프로그래머스 숫자 문자열과 영단어 [Java] (0) | 2022.02.14 |