목표 (문제)
주어진 numbers의 각각 숫자들을 조합하여 만들 수 있는 모든 소수의 수를 반환하세요.
조건
- numbers는 길이가 1 ~ 7 인 문자열입니다.
- numbers는 0~9 까지 숫자값만으로 이루어져 있습니다.
- 013은 0, 1, 3 숫자로 조합하면 됩니다.
- 11과 011은 같은 숫자로 취급합니다.
코드
동작
오류 발생
Set<Integer> lhs = new LinkedHashSet<Integer>();
public int solution(String numbers) {
makeCombination("", numbers);
return getPrimeCount(new LinkedList<Integer>(lhs));
}
public int getPrimeCount(LinkedList<Integer> numbers) {
for (int prime : new int[] { 2, 3, 5, 7 }) {
for (int i = 0; i < numbers.size(); i++) {
int number = numbers.get(i);
if (number < 2 || (number % prime == 0 && number != prime)) {
numbers.remove(i--);
}
}
}
return numbers.size();
}
public void makeCombination(String s, String number) {
if (number.length() == 0) {
if (!s.equals("")) {
lhs.add(Integer.parseInt(s));
}
} else {
for (int i = 0; i < number.length(); i++) {
makeCombination(s + number.charAt(i), number.substring(0, i) + number.substring(i + 1, number.length()));
}
for (int i = 0; i < number.length(); i++) {
makeCombination(s, number.substring(0, i) + number.substring(i + 1, number.length()));
}
}
}
잡설
소수 구하는건 생각해냈지만 숫자조합을 도저히 생각해낼 수 없었기에 결국 찾아보게 되었다.
이곳 에서
0 개의 댓글:
댓글 쓰기