알고리즘
[PGS] 프로그래머스 - 소수찾기 (JAVA)
애용쓰
2023. 2. 16. 00:18
https://school.programmers.co.kr/learn/courses/30/lessons/42839#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
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); 부분을 그냥 아예 빈 문자열로 만들어버려서 틀렸었다. ㅜㅜ
그래도 예전에 못풀었던 문제를 풀어서 나름 뿌듯하다 :)