olrlobt

[프로그래머스 2단계] k진수에서 소수 개수 구하기 본문

Algorithm/프로그래머스

[프로그래머스 2단계] k진수에서 소수 개수 구하기

olrlobt 2022. 12. 30. 22:08

🔒 2단계 - k진수에서 소수 개수 구하기

📌 테스트케이스 추가 힌트

1번, 11번에서 런타임 에러가 난다면,

Parameters
n 1000000 k 2

Return
X

n값에 최대값을 넣어 값이 잘 나오는 지 확인해 보고, 숫자가 넘어가는 과정을 생각해본다.





✍️ 풀이법

해당 문제에서 [211,2,11을 k진법으로 보았을 때가 아닌, 10진법으로 보았을 때] 라는 문구는
10진법으로 변환하라는 것이 아니라는 것에 주의한다.


1. 주어진 n을 k진법으로 변환한다.

  변환을  할때, n을 k로 나눈 나머지를 이어 붙여서, 뒤집어 주어야 k진법으로 완벽히 변환 된다.

2. k진법으로 변환한 수를 0으로 split한다.

3. split 한 문자열을 10진법으로 보았을때, 소수인지 판별한다.

  (2진법 11을 10진법으로 본다면, 3이 아닌 11이라는 것에 유의한다.)





🗝️ 풀이

class Solution {
    public int solution(int n, int k) {
        int answer = 0;
        StringBuilder jinsu = new StringBuilder();

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

        String [] primeNumber = jinsu.toString().split("0");

        for(String i : primeNumber){
            if(!i.equals("") && !i.equals("1") && isPrime(Long.parseLong(i))){
                answer ++;
            }
        }
        return answer;
    }

    boolean isPrime(Long n){
        for(int i=2; i<=Math.sqrt(n); i++){
            if(n%i == 0){
                return false;
            }
        }
        return true;
    }
}

타입을 넘겨줄 때, 값이 Int의 범위를 넘어가는 지, 잘 생각할 필요가 있다.

Comments