본문 바로가기
Algorithm/Programmers Java

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

by 제우제우 2024. 10. 8.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT > k진수에서 소수 개수 구하기

 

난이도: LEVEL2

알고리즘 유형: 소수판별 + 구현(진법 변환)

정답 코드 

import java.util.*;
import java.util.stream.IntStream;
class Solution {
    public int solution(int n, int k) {
        return (int) count(change(n, k));
    }
    public static long count(String output) {
        return Arrays.stream(output.split("0"))
                .filter(o -> !o.isEmpty()) // 빈 문자열 필터
                .map(Long::parseLong) // str -> Long 
                .filter(Solution::isPrime) // 소수인 값만 필터
                .count(); 
    }
    // 소수 판별 메서드
    public static boolean isPrime(long num) {
        if (num < 2) return false;
        return IntStream.rangeClosed(2, (int)Math.sqrt(num))
            .noneMatch(i -> num % i == 0);
    }
    public static String change(int n, int k) {
        // 10진수면 바로 반환, 그렇지 않으면 k진수로 변환
        return k == 10 ? Integer.toString(n) : convert(n, k);
    }
    // n을 k진수로 변환
    public static String convert(int n, int k) {
        StringBuilder sb = new StringBuilder();
        while (n >= k) {
            sb.append(n % k);
            n /= k;
        }
        sb.append(n);
        return sb.reverse().toString();
    }
}

 

최근에 Stream API를 공부해서 최대한 활용해서 풀어봤다.