코딩테스트 준비 💻/Programmers

[프로그래머스] 자바 Java, 코딩테스트 > 완전탐색 > 소수 찾기

ImYena 2021. 11. 11. 01:43
728x90
 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr


문제 설명

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

numbers return
"17" 3
"011" 2

입출력 예 설명

예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

  • 11과 011은 같은 숫자로 취급합니다.

 

나의 풀이

import java.util.*;

class Solution {
    public static HashSet<Integer> set = new HashSet<>();
    
    public int solution(String numbers) {
        permutation("", numbers);
        
        int count = 0;
        Iterator<Integer> it = set.iterator();
        while(it.hasNext()) {
            int num = it.next();
            if(isPrime(num)) count++;
        }
        
        return count;
    }
    
    public static void permutation(String s1, String s2) {
        if(!s1.equals("")) set.add(Integer.parseInt(s1));
        
        for(int i=0; i<s2.length(); i++) {
            permutation(s1+s2.charAt(i), s2.substring(0,i)+s2.substring(i+1));
        }
    }
    
    public static boolean isPrime(int num) {
        if(num <= 1) return false;
        
        // int limit = (int) Math.sqrt(num); //에라토스테네스의 체
        
        for(int i=2; i<num; i++) if(num % i == 0) return false;
        
        return true;
    }
}
  • 참고했던 풀이가 에라토스테네스의 체를 사용해서 풀었길래, 처음 풀어 볼 때 그냥 오, 좋네 하고 따라했는데, 다시 문제를 제대로 이해하고 풀어보니깐 굳이 필요 없는 과정 같아서 비교해봤더니 에라토스테네스의 체를 사용하는 것이 오히려 느려짐

실행 결과

출력 결과(에라토스테네스의 체 사용X)

출력 결과(에라토스테네스의 체 사용O)

 

오늘의 배움 📚

 

[프로그래머스] 소수 찾기 (완전탐색 Lv. 2) - 자바 Java

0. 자세한 설명은 영상으로 https://www.youtube.com/watch?v=pF368QqdQb4 1. 문제 설명 (출처 : 프로그래머스, 원 출처) 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇

coding-grandpa.tistory.com

 

오늘의 공부 📚

  • 순열
 

[코딩테스트] 자바 Java, 순열과 조합: 순열

순열과 조합 순열 Permutation : nPr 서로 다른 n개 중의 r개를 뽑을 때, 순서를 포함한 경우의 수 중복 가능한 n개 중 r개를 뽑으면, 중복 순열 예시 {A, B} 중 2개를 뽑는 순열 : {A, B,}, {B, A} 조합 Combinat..

imyena.tistory.com

  • 에라토스테네스의 체
 

[코딩테스트] 자바 Java, 에라토스테네스의 체: 소수 찾기

에라토스테네스의 체 Sieve of Eratosthenes 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법 마치 체로 치듯 수를 걸러내가며 소수를 찾아가는 방법 특정 범위 내의 소수를 찾는

imyena.tistory.com

 

실행 결과

 

728x90
반응형