본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] k진수에서 소수 개수 구하기

by 현장 2026. 1. 5.

-Code

import java.util.*;

class Solution {
    public int solution(int n, int k) {
        int answer = 0;
        String[] nums = changeFormat(n, k).split("0+");
        for (String num : nums) {
            if (isPrime(Long.parseLong(num))) {
                answer++;
            }
        }
        return answer;
    }
    // 소수 확인
    private static boolean isPrime(Long num) {
        if (num < 2) return false;
        if (num == 2) return true;
        for (long n = 2; n * n <= num; n++) {
            if (num % n == 0) {
                return false;
            }
        }
        return true;
    }
    // 진법 변환
    private static String changeFormat(int n, int formatNum) {
        StringBuilder answer = new StringBuilder();
        
        while(n > 0) {
            answer.append(n % formatNum);
            n /= formatNum;
        }
        return answer.reverse().toString();
    }
}

로직을 다 짜고나서 진법 변환 후 값이 문제가 좀 있었습니다. Integer.parseInt를 통해 소수 계산을 했지만 틀려서 찾아보니 진법 변환후 0을 기준으로 나눈 수가 21억이 넘는 경우가 있었고 이를 해결하기 위해 long으로 바꾸어서 해결했습니다.