본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - k진수에서 소수 개수 구하기

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

 

프로그래머스

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

programmers.co.kr

어떤 양의 정수 n을 k진수로 바꿨을 때, 조건에 맞는 소수가 몇 개인지를 구하는 문제

while(n > 0) {
    remainder = n % k;
    n = n / k;
    sb.append(remainder);
}
sb.reverse();

먼저 n을 k진수로 바꾸어 주었다

String s = sb.toString();
String[] st = s.split("0");
for (int i = 0; i < st.length; i++) {
    if (st[i].equals("")) st[i] = "0";
}

그런 다음에 0으로 split 해주고 ""이 된다면 다시 0을 집어넣어 줬다

public static int func(long n) {
    if (n <= 1) return 0;
    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

그리고 st를 순차적으로 탐색하여 소수인지를 판단하고 소수면 1을 아니면 0을 answer에 더해주어 정답을 찾았다

아래는 전체 코드

class Solution {
    public int solution(int n, int k) {
        int answer = 0, remainder;
        StringBuilder sb = new StringBuilder();
        while(n > 0) {
            remainder = n % k;
            n = n / k;
            sb.append(remainder);
        }
        sb.reverse();
        String s = sb.toString();
        String[] st = s.split("0");
        for (int i = 0; i < st.length; i++) {
            if (st[i].equals("")) st[i] = "0";
        }
        for (int i = 0; i < st.length; i++) {
            answer += func(Long.parseLong(st[i]));
        }
        return answer;
    }

    public static int func(long n) {
        if (n <= 1) return 0;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                return 0;
            }
        }
        return 1;
    }
}