코딩테스트 문제풀이

[프로그래머스] 소수 찾기 - 완전탐색

지잉지잉 2021. 10. 2. 00:18

문제

풀이

import java.util.*;

class Solution {
    public int solution(String numbers) {
        int answer = 0;
       
        Set<Integer> allNumbers = new HashSet<Integer>();
        
        getAllNumbers(allNumbers, numbers, "");
        
        for (Integer num : allNumbers) {
            if (isPrime(num)) answer++;
        }
       
        return answer;
    }
    
    public void getAllNumbers(Set<Integer> allNumbers, String numbers, String numStr) {
        if (!numStr.equals("")) allNumbers.add(Integer.parseInt(numStr));
        
        if (numbers.length() == 0) return;
        
        for (int i = 0; i < numbers.length(); i++) {
            StringBuffer sb = new StringBuffer(numbers);
            String newNumStr = numStr + numbers.substring(i, i+1);
            String newNumbers = sb.deleteCharAt(i).toString();
            getAllNumbers(allNumbers, newNumbers, newNumStr);
        }
    }
    
    public boolean isPrime(int number) {
        if (number < 2) return false;
        
        for (int i = 2; i * i <= number; i++) {
            if (number % i == 0) return false;
        }
        
        return true;
    }
}
  • 재귀함수를 통해 모든 경우의 수를 구한다.
  • 구해온 모든 경우의 수를 소수판별한다.

출처: https://programmers.co.kr/learn/courses/30/lessons/42839