[문제]
출처 - https://programmers.co.kr/learn/courses/30/lessons/42839?language=java
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr

[문제 풀이]
이 문제는 소수를 판단하는 함수와 dfs방식으로 찾는 함수를 만들어서 구현을 해준다.
dfs함수를 구현할때 String 값을 Integer값으로 변경하여 찾을 수 있는 값 전부를 중복없이 리스트에 담아주고
리스트에 담긴 값들을 소수판단하여 세주면 된다.
- 백트래킹 방법 사용
 - for문을 사용해 각 1부터 ~ numbers 의 길이만큼 순열을 만들어 준다.
 - ArrayList을 만들어 순열을 만드는데 11과 011과 같은 중복되는 수는 중복을 체크하고 리스트에 넣어준다.
 - 리스트에 담긴 모든 값을 소수인지 아닌지 판단한다.
 
[소스 코드]
import java.io.*;
import java.util.*;
class Solution {
    static ArrayList<Integer> arr = new ArrayList<>();
    static boolean[] check = new boolean[7];
    
    public int solution(String numbers) {
        int answer = 0;
        for(int i=0; i<numbers.length(); i++){
            dfs(numbers,"",i+1);
        }
        
        for(int i=0; i<arr.size(); i++){
            if(prime(arr.get(i))) answer++;              
        }
        
        return answer;
  
    }
	//백트래킹
	static void dfs(String str, String temp, int m) {
            if(temp.length() == m){
                int num = Integer.parseInt(temp);
                if(!arr.contains(num)){
                    arr.add(num);
                }
            }
        
            for(int i=0; i<str.length(); i++){
                if(!check[i]){
                    check[i] = true;
                    temp += str.charAt(i);
                    dfs(str, temp, m);
                    check[i] = false;
                    temp = temp.substring(0, temp.length()-1);
                }
            }
		
	}
	//소수 판단
	static boolean prime(int n) {
		if(n<2) return false;
		
		for(int i=2; i*i<=n; i++) {
			if(n % i == 0) return false;
		}
		
		return true;
	}
}'프로그래머스' 카테고리의 다른 글
| [프로그래머스 Level2] 문자열 압축 (JAVA) - 2020 Kakao (0) | 2022.02.01 | 
|---|---|
| [프로그래머스 Level3] - 디스크 컨트롤러 (JAVA) (2) | 2022.01.17 | 
| [프로그래머스 Level2] 더 맵게 (JAVA) (0) | 2022.01.12 | 
| [프로그래머스 Level2] 오픈채팅방 (JAVA) - 2019 Kakao (0) | 2022.01.11 | 
| [프로그래머스 Level2] 타겟 넘버(JAVA) (0) | 2021.12.28 |