코딩테스트 문제풀이
[프로그래머스] 소수 찾기 - 완전탐색
지잉지잉
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