Algorithm/Programmers
[Java] 2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기 (Lv2)
th42500
2022. 8. 1. 22:08
https://school.programmers.co.kr/learn/courses/30/lessons/92335
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예시
💡 풀이과정 및 포인트
1️⃣ n을 k의 진수로 변환
2️⃣ k진수로 변환한 수에서 0이 포함되지 않는 수 P 찾기 (0기준으로 자르기)
3️⃣ 0이 포함되지 않는 수 P가 소수인지 아닌지 판별 (수가 너무 커질 수 있으므로 long 타입 사용)
✔ 소스코드
import java.util.Arrays;
import java.util.List;
public class Solution { // k진수에서 소수 개수 구하기
public static void main(String[] args) {
// int n = 437674;
// int k = 3;
// int n = 110011;
// int k = 10;
int n = 25;
int k = 2;
System.out.println(solution(n, k));
}
private static int solution(int n, int k) {
int answer = 0;
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append(n % k);
n /= k;
}
// 0 기준으로 잘라서 List 생성
List<String> numList = Arrays.asList(sb.reverse().toString().split("0"));
for(String num:numList) {
if(num.equals("")) {
continue;
}
if(isPrime(Long.parseLong(num))) { // 수가 너무 커서 long 타입 사용
answer++;
}
}
return answer;
}
// 소수 판별
private static boolean isPrime(long num) {
if(num == 1) {
return false;
}
for(int i=2; i <= Math.sqrt(num); i++) {
if(num%i==0) { // 나누어 떨어진다면 소수 x
return false;
}
}
return true;
}
}
❗ 결과
👉 테스트 통과
long 타입을 사용하여야 하는지 생각을 못하고 있다가 문제 내의 질문하기를 통해 알게되어 겨우 풀었던 문제 💦
앞으로는 더 꼼꼼하게 확인하고 문제 풀기!!