https://programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
저는 문자열을 모두 숫자로 변경하고 이를 dfs를 통해 각각의 소수를 찾았습니다.
저는 중복체크를 위해 set을 사용하여 소수의 개수를 찾았습니다.
import java.util.*;
class Solution {
public int solution(String numbers) {
int answer = 0;
int size = numbers.length();
int[] num = new int[size];
for(int i = 0 ; i < size ; i++){
num[i] = Integer.parseInt(numbers.charAt(i)+"");
}
boolean[] used = new boolean[size];
Set<Integer> prime = new HashSet<>();
dfs(0,0,used,num,size,prime);
answer = prime.size();
return answer;
}
private void dfs(int depth,int now,boolean[]used,int[] num,int size,Set<Integer> prime){
if(checkIsPrime(now)){
prime.add(now);
}
if(depth == size){
return ;
}
for(int i = 0 ; i < size ; i++){
if(used[i]){
continue;
}
used[i] = true;
dfs(depth+1,10*now +num[i],used,num,size,prime);
used[i] = false;
}
}
private boolean checkIsPrime(int num){
if(num == 1 || num == 0){
return false;
}
for(int i = 2 ; i <= Math.sqrt(num); i++){
if(num % i == 0){
return false;
}
}
return true;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 큰 수 만들기 (JAVA) (0) | 2022.06.14 |
---|---|
프로그래머스 2 x n 타일링 (JAVA) (0) | 2022.06.13 |
프로그래머스 프린터 (JAVA) (0) | 2022.06.11 |
프로그래머스 쿼드압축 후 개수 세기 (JAVA) (0) | 2022.06.10 |
프로그래머스 1차 캐시 (JAVA) (0) | 2022.06.09 |