본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 소수 찾기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

ArrayList<Integer> al = new ArrayList<>();
generate(al, numbers.toCharArray(), new boolean[numbers.length()], "");
for (int i = 0; i < al.size(); i++) {
    if (toPrimeNumber(al.get(i))) {
        answer++;
    }
}

소수 여부를 확인하여 소수인 경우 정답을 증가

public boolean toPrimeNumber(int number) {
    if (number <= 1) return false;

    for (int i = 2; i < number; i++) {
        if (number % i == 0) {
            return false;
        }
    }

    return true;
}

소수 여부를 체크

public void generate(ArrayList<Integer> al, char[] numbers, boolean[] booleans, String s) {
    for (int i = 0; i < numbers.length; i++) {
        if (!booleans[i]) {
            s += String.valueOf(numbers[i]);
            booleans[i] = true;
            generate(al, numbers, booleans, s);
            s = s.substring(0, s.length() - 1);
            booleans[i] = false;
        } else {
            if (!al.contains(Integer.parseInt(s))) {
                al.add(Integer.parseInt(s));
            }
        }
    }
}

숫자 생성

import java.util.ArrayList;
class Solution {
    public int solution(String numbers) {
        int answer = 0;
        ArrayList<Integer> al = new ArrayList<>();
        generate(al, numbers.toCharArray(), new boolean[numbers.length()], "");
        for (int i = 0; i < al.size(); i++) {
            if (toPrimeNumber(al.get(i))) {
                answer++;
            }
        }

        return answer;
    }

    public boolean toPrimeNumber(int number) {
        if (number <= 1) return false;

        for (int i = 2; i < number; i++) {
            if (number % i == 0) {
                return false;
            }
        }

        return true;
    }

    public void generate(ArrayList<Integer> al, char[] numbers, boolean[] booleans, String s) {
        for (int i = 0; i < numbers.length; i++) {
            if (!booleans[i]) {
                s += String.valueOf(numbers[i]);
                booleans[i] = true;
                generate(al, numbers, booleans, s);
                s = s.substring(0, s.length() - 1);
                booleans[i] = false;
            } else {
                if (!al.contains(Integer.parseInt(s))) {
                    al.add(Integer.parseInt(s));
                }
            }
        }
    }
}