코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 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
실행 결과