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

 

✔ 입출력 예시

 

k진수에서 소수 개수 구하기 입출력 예시

 

💡 풀이과정 및 포인트

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 타입을 사용하여야 하는지 생각을 못하고 있다가 문제 내의 질문하기를 통해 알게되어 겨우 풀었던 문제 💦

앞으로는 더 꼼꼼하게 확인하고 문제 풀기!!