https://school.programmers.co.kr/learn/courses/30/lessons/42839#
import java.util.*;
import java.math.*;
class Solution {
public static HashSet<Integer> numberArr;
static boolean[] visited;
static String tmp;
public boolean isPrime(int x){
if(x<2) return false;
for(int i=2; i*i<=x; i++) {
if(x % i == 0) return false;
}
return true;
}
public void makeNum(String numbers, int n, int d){
//n : 뽑을 개수
//d : 깊이
if(d==n) {
numberArr.add(Integer.parseInt(tmp));
return;
}
else{
for(int i=0;i<numbers.length();i++){
if(!visited[i]){
visited[i] = true;
tmp += numbers.charAt(i);
makeNum(numbers, n, d+1);
visited[i] = false;
tmp = tmp.substring(0, tmp.length()-1);
}
}
}
}
public int solution(String numbers) {
visited = new boolean[numbers.length()];
numberArr = new HashSet<>();
tmp = "";
int cnt = 0;
for(int i=1;i<=numbers.length();i++){
makeNum(numbers,i,0);
}
for(Integer s:numberArr){
if(isPrime(s)){
cnt++;
}
}
return cnt;
}
}
1. 카드로 만들 수 있는 숫자 hashSet에 넣기 (중복 제거)
2. 소수 판별해서 소수면 cnt++
소수 판별 함수는 그냥 외워버리자구 !
tmp = tmp.substring(0. tmp.length()-1); 부분을 그냥 아예 빈 문자열로 만들어버려서 틀렸었다. ㅜㅜ
그래도 예전에 못풀었던 문제를 풀어서 나름 뿌듯하다 :)
'알고리즘' 카테고리의 다른 글
[PGS] 프로그래머스 - 체육복 (JAVA) (0) | 2023.02.22 |
---|---|
[BOJ] 6603번: 로또 (JAVA) (0) | 2023.02.20 |
[BOJ] 14499번: 주사위 굴리기 (JAVA) (0) | 2023.02.06 |
[BOJ] 22233번 : 가희와 키워드 (JAVA) (0) | 2023.02.04 |
[BOJ] 15663번 : N과 M (9) (JAVA) (0) | 2023.02.03 |