[Programmers/JAVA] k진수에서 소수 개수 구하기

2023. 2. 24. 23:26자바/프로그래머스

 

내 코드

import java.util.*;
class Solution {
    public int solution(int n, int k) {
        int answer=0;

        //k진법으로 만들고 0을 기준으로 나누기
        String[] n_change=Long.toString(n,k).split("0");

        for(String num:n_change) {
            if(num.length()==0 || num.equals("1")) {
                continue;
            }else if(num.equals("2") || num.equals("3")){//2와 3은 소수니까
                answer++;
            }else {
                long one=Long.parseLong(num);
                boolean result=true;

                //소수확인
                for(int i=2; i<=Math.sqrt(one); i++) {
                    if(one % i ==0) {
                        result=false;
                        break;
                    }
                }
                if(result==true) {
                    answer++;
                }
            }
        }

        return answer;
    }
}

 

느낀점

소수를 구하는 방법 중 제곱근을 사용하는 방법이 있다는 것을 알게됐다. 런타임을 신경쓰다보니까 코드가 훨씬 좋아지는구나..! 알고리즘을 왜 풀어야하는지 알겠다. 코드는 맞는것같은데 런타임에러가 계속 나길래 무슨 이유일까 많이 고민했는데 알고보니 자료형 문제였다. 다른 사람의 풀이를 보지않고서는 도저히 알아내지 못했을 것이다... String인 num을 int one으로 바꾸는 과정에서 오류가 있었나보다. long으로 해줘야지 런타임 에러가 나지않는다.