diff --git a/programmers/소수 찾기/solution.java b/programmers/소수 찾기/solution.java index 2acbc82..ee80c91 100644 --- a/programmers/소수 찾기/solution.java +++ b/programmers/소수 찾기/solution.java @@ -1,18 +1,30 @@ -// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/12921 +// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/42839 + +import java.util.HashSet; class Solution { - public int solution(int n) { + public int solution(String numbers) { + HashSet hs = new HashSet<>(); + per("",numbers,hs); int answer = 0; - for(int a = 2; a<=n; a++){ - int t = 0; - for(int b=2; b<=Math.sqrt(a); b++){ - if(a%b==0) { - t = 1; - break; - } - } - if(t == 0) answer+= 1; + while(hs.iterator().hasNext()){ + int a = hs.iterator().next(); + hs.remove(a); + if(a==2) answer++; + if(a%2!=0 && prime(a)) answer++; } return answer; } + private boolean prime(int n){ + if(n==0||n==1) return false; + for(int i=3; i<=(int)Math.sqrt(n); i+=2){ + if(n%i==0) return false; + } + return true; + } + private void per(String pre, String str, HashSet hs){ + int len = str.length(); + if(!pre.equals("")) hs.add(Integer.valueOf(pre)); + for (int i = 0; i < len; i++) per(pre + str.charAt(i), str.substring(0,i) + str.substring(i+1, len),hs); + } } \ No newline at end of file