[프로그래머스] K진수에서 소수 개수 구하기 - Java, 자바

Kim Ji Eun·2022년 5월 2일
0

난이도

레벨 2

문제

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

풀이

  1. k진수로 바꾸기
  2. 0으로 split 해서 배열에 저장하기
  3. 배열 반복문 돌리면서 소수인지 확인하기
  4. 개수 세기

이 문제에서 놓친 것은 10진수를 k진수로 바꿀 때 n의 최대가 1,000,000이므로 엄청나게 길어질 것으로 예상되어 Long으로 바꿔주었다 (안바꾸면 테케 1,11 오류남)

K진수로 바꾸는 방법 두가지 있다.
2번째 방법을 사용했지만 변환함수가 있는지 오늘 알았다. 앞으로 이거 적극 사용해서 코드 줄이기!

  1. 함수를 사용하는 방법
 Integer.toString(n,k)
  1. 정석적인 풀이
String numK ="";
while(n!=0){
	numK+=String.valueOf(n%k);
    n=n/k;
}
numK = sb.append(numK).reverse().toString();

코드

import java.util.*;
class Solution {
    public int solution(int n, int k) {
        StringBuilder sb = new StringBuilder();
        int answer = 0;
        
        String numK ="";
        while(n!=0){
            numK+=String.valueOf(n%k);
            n=n/k;
        }
        numK = sb.append(numK).reverse().toString();
        
        
        System.out.println(numK);
        
        numK = numK.replaceAll("[0]{2,}","0");
        String[] num = numK.split("0");
        
        for(int i=0;i<num.length;i++){
            // if(!num[i].equals("")){
                if(isPrime(Long.parseLong(num[i]))){
                    answer++;
                  }
            
            //}
             System.out.println(i+" "+num[i]);
            
        }
        return answer;
    }
    
    public boolean isPrime(Long n){
        if (n ==1 || n==0){
            return false;
        }
        for(int i=2;i<=Math.sqrt(n);i++){
            if(n%i==0) return false;
        }
        return true;
    }
}
profile
Back-End Developer

0개의 댓글