https://school.programmers.co.kr/learn/courses/30/lessons/92335
코딩테스트 연습 > 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를 공부해서 최대한 활용해서 풀어봤다.
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL2 [3차] 압축 (3) | 2024.10.09 |
---|---|
[JAVA] 프로그래머스 LEVEL2 후보키 (1) | 2024.10.08 |
[JAVA] 프로그래머스 LEVEL3 2차원 동전 뒤집기 (0) | 2024.10.07 |
[JAVA] 프로그래머스 LEVEL3 부대 복귀 (2) | 2024.10.07 |
[JAVA] 프로그래머스 LEVEL3 불량 사용자 (2) | 2024.10.06 |