알고리즘

프로그래머스 k진수에서 소수 개수 구하기(JAVA)

박카스마시며코딩 2022. 2. 21. 16:38

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

 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

 

저는 먼저 수를 k진수의 String 값으로 변경하였습니다.

(k진수로 변환은 수를 계속 k로 모듈러연산을 하고 이 값을 reverse하였습니다.)

이 결과값(String)을 0 을 기준으로 나누고 각각의 값이 소수인지를 판별하여 문제를 풀었습니다.

 

package Programmers.KAKAO_2022;

import java.util.*;
class Solution {
    private static String numberToK(int n , int k){
        StringBuilder sb = new StringBuilder();
        while(n > 0){
            sb.append(n%k);
            n /= k;
        }
        sb = sb.reverse();
        return sb.toString();
    }
    private static int countPrime(String number){
        int result = 0;
        String[] temps = number.split("0");
        for(String temp : temps){
            // System.out.println(temp);
            if(!"".equals(temp) && !" ".equals(temp) && isPrime(temp)){
                result++;
            }
        }
        return result;
    }
    private static boolean isPrime(String number){
        long num = Long.parseLong(number);
        if(num == 1){
            return false;
        }
        for(long i = 2 ; i <= Math.sqrt(num) ; i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    public int solution(int n, int k) {
        int answer = -1;
        String number = numberToK(n,k);
        answer = countPrime(number);
        return answer;
    }
}