[코딩테스트] 프로그래머스 - k진수에서 소수 개수 구하기(Java)

jdev·2022년 9월 18일
0

Coding-Test

목록 보기
15/29
post-thumbnail

😗 설명

레벨: 2
언어: 자바(Java)

🐕 느낀점

레벨 2중에서도 쉬운문제가 아닐까 싶다..
요즘에 코테능력이 오른건가 내 기분상 쉽게풀리는데

해당문제를 근본적으로 살펴보면 0 제외한 숫자들을 뽑아내서 소수체크를 하는 문제인데
저의 풀이방법은 다음과 같습니당
1. Integer 메서드인 toString 으로 진법변환을 시도
2. 정규식을 사용해서(0 하나이상 일경우 split)
3. 소수체킹을 합니다

처음에 이문제를 풀고 중간에 런타임에러가 발생했는데.. 빈문자열이 들어갔나싶었더니
overflowException이 발생하지 않았을까 싶어서 Integer -> Long으로 변경했습니다.

좋아요 많이받은코드 풀이방법을 살펴보면
1. 제가 한방식처럼 Integer.toString 사용
2. split을 단지 0으로만하면 00 이런식으로 연속으로 붙는경우 해당사이 빈문자열값이 배열에 들어갑니다.
3. 그래서 루프돌때 length 체킹해서 빈문자열 넘기고, 1일 경우도 소수이니 넘기고
4. 루프돌리면서 소수체킹하네요

흐름을 보면 저랑 비슷한코드입니다.

음 마지막으로 생각해보니 stream으로 좀더 간결하게 할수있었겠네용!

🐽 내가 작성한 코드

class Solution {
    public int solution(int n, int k) {
        
        int answer = 0;
        for(String value: Integer.toString(n, k).split("[0]+")) {
            if(isPrime(Long.valueOf(value))) answer++;
        }
        
        return answer;
    }
    
    boolean isPrime(long value) {
        if(value < 2) return false;
        
        for(int i = 2; i <= (int) Math.sqrt(value); i++) {
            if(value % i == 0) return false;
        }
        
        return true;
    }
}

🐚 좋아요 가장 많이 받은 코드

class Solution {
    public int solution(int n, int k) {

        int ans = 0;
        String temp[] = Integer.toString(n, k).split("0");

        Loop : for(String t : temp) {
            if(t.length() == 0) continue;
            long a = Long.parseLong(t);
            if(a == 1) continue;
            for(int i=2; i<=Math.sqrt(a); i++)
                if(a%i == 0) continue Loop;

            ans++;
        }
        return ans;
    }
}

0개의 댓글