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

AMUD·2022년 9월 15일
0

Algorithm

목록 보기
40/78

문제


문제링크

접근

  • 순차적으로 진법 변환 - split - 소수 판별을 구현하면 된다.
  • 모두 구현하고 채점을 하였는데, 1번 11번 테케에서 런타임오류가 났다. 이는 소수 판별 과정에서 int를 long으로 바꾸었더니 해결되었다.
  • 그 다음은 1번에서 시간초과가 났는데, 이는 소수 판별과정에서 루프가 제곱근의 단위로 올라가도록하여 해결되었다.

소스코드

class Main {
    public static void main(String[] args) throws Exception {
        int n = 110011;
        int k = 10;

        Solution sol = new Solution();
        System.out.println("result : " + sol.solution(n, k));
    }
}

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

        int currNum = n;
        String num = "";
        while (currNum != 0) {
            num = String.valueOf(currNum % k) + num;
            currNum /= k;
        }

        String[] nums = num.split("0");
        int numsLength = nums.length;

        for (int i = 0; i < numsLength; i++) {
            if (nums[i].equals("1") || nums[i].equals(""))
                continue;

            else if (isPrime(nums[i])) {
                answer++;
            }
        }

        return answer;
    }

    public static boolean isPrime(String numString) {
        long num = Long.parseLong(numString);
        if(num == 2) return true;

        for(int i=2;i<=(int)Math.sqrt(num);i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글