1. 문제
https://programmers.co.kr/learn/courses/30/lessons/42839#qna
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 �
programmers.co.kr
2. 나의 풀이
import java.util.*;
class Solution {
ArrayList <Integer> all_number = new ArrayList<>();
String number = "";
public int solution(String numbers) {
int answer = 0;
String [] numbers_split = numbers.split("");
Arrays.sort(numbers_split);
int len = numbers_split.length;
boolean [] visited = new boolean[len];
//System.out.println(Arrays.toString(visited));
System.out.println(Arrays.toString(numbers_split));
for(int i = 1; i <= len; i = i + 1) {
gyeongwoo(numbers_split, visited, len, i);
}
System.out.println(all_number);
//System.out.println(Arrays.toString(visited));
//System.out.println(Integer.parseInt("01"));
for(int imsi : all_number) {
if(isPrime(imsi)) {
answer += 1;
System.out.println("imsi : " + imsi + ", answer : " + answer);
}
}
return answer;
}
//배열과 자릿 수가 매개변수로 주어질 때 해당 자릿 수로 나올 수 있는 모든 매개변수를 ArrayList에
//저장하는 메소드
void gyeongwoo(String [] numbers_split, boolean [] visited, int len, int i){
if(i == 0) {
if(Integer.parseInt(number) == 0) {
}else if(!all_number.contains(Integer.parseInt(number))) {
System.out.println(number);
all_number.add(Integer.parseInt(number));
}
}
for(int j = 0; j < len; j = j + 1) {
if(visited[j] == true) {
continue;
}else if(visited[j] == false) {
visited[j] = true;
number += numbers_split[j];
}
gyeongwoo(numbers_split, visited, len, i - 1);
visited[j] = false;
number = number.substring(0, number.length()-1);
}
}
// 소수인지 확인하는 메소드
boolean isPrime(int number) {
if(number == 1) {
return false;
}else if(number == 2) {
return true;
}
for(int i = 2; i <= Math.sqrt(number); i = i + 1) {
if(number % i == 0) {
return false;
}
}
return true;
}
}
3. 다른 사람 풀이
import java.util.HashSet;
class Solution {
public int solution(String numbers) {
HashSet<Integer> set = new HashSet<>();
permutation("", numbers, set);
int count = 0;
while(set.iterator().hasNext()){
int a = set.iterator().next();
set.remove(a);
if(a==2) count++;
if(a%2!=0 && isPrime(a)){
count++;
}
}
return count;
}
public boolean isPrime(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;
}
public void permutation(String prefix, String str, HashSet<Integer> set) {
int n = str.length();
//if (n == 0) System.out.println(prefix);
if(!prefix.equals("")) set.add(Integer.valueOf(prefix));
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), set);
}
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
(Java)프로그래머스 코딩테스트 연습 - 탐욕법(Greedy) - 구명보트 (0) | 2020.10.24 |
---|---|
(Java)프로그래머스 코딩테스트 연습 - 해시 - 전화번호 목록 (0) | 2020.10.21 |
(Java)프로그래머스 코딩테스트 연습 - 힙(Heap) - 더 맵게 (0) | 2020.10.19 |
(Java)프로그래머스 코딩테스트 연습 - 월간 코드 챌린지 시즌1 - 삼각 달팽이 (0) | 2020.10.19 |
(Java)프로그래머스 코딩테스트 연습 - 2017 카카오코드 예선 - 카카오프렌즈 컬러링북 (0) | 2020.10.15 |