[PS] 프로그래머스 소수 찾기

이진용·2023년 4월 3일

문제 설명

문제 바로가기

생각해보기

순!열! 문제다.

조합 또는 순열 문제다 싶으면 진짜 그런 문제인지 살펴볼 필요가 있다. 괜히 삽질하는 경우가 많기 때문이다.

진짜 순열 문제다.

오랜만에 순열을 푸려니 잘 생각이 안났다. 아쉽.

풀이

import java.util.*;
class Solution {
    public int solution(String numbers) {
        Set<Integer> set = new HashSet<>();
        boolean[] used = new boolean[numbers.length()];
        comb(numbers, "", set, used);
        return set.size();
    }
    
    private void comb(String numbers, String result, Set<Integer> set, boolean[] used) {
        if(result.length() > 0) {
            int num = Integer.parseInt(result);
            if(isPrime(num)) set.add(num);
        }
        for(int i = 0; i < numbers.length(); i++) {
            if(used[i]) continue;
            used[i] = true;
            comb(numbers, result + numbers.charAt(i), set, used);
            used[i] = false;
        }
    }
    
    private boolean isPrime(int num) {
        if(num < 2) return false;
        for(int i = 2; i <= Math.sqrt(num); i++)
            if(num % i ==0) return false;
        return true;
    }
    
    private String reverse(String s) {
        StringBuilder sb = new StringBuilder(s);
        return sb.reverse().toString();
    }
}

중복 제거를 위해 Set을 사용하였다.
지금 보니 순열은 permutation인데 comb라고 써버렸다.

profile
멋있는 개발자가 되어야지.

0개의 댓글