[2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기

최민길(Gale)·2023년 3월 17일
1

알고리즘

목록 보기
54/172

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/92335

[이 문제는 프로그래머스에서 푼 문제입니다.]
이 문제는 소수를 구하는 알고리즘과 진수를 구하는 방법에 대해 알고 있다면 쉽게 풀 수 있습니다. 전체적인 풀이는 다음과 같습니다.

  1. 주어진 n을 k진수로 만든다
    --> String num = Integer.toString(n,k)
  2. 0을 기준으로 파싱한다
    --> String[] arr = num.split("0")
  3. 파싱한 수를 소수인지 아닌지 체크한다

소수 체크 알고리즘은 크게 에라토스테네스의 체 방식과 2부터 루트n까지 나누어 나머지가 0이 아닌 수를 선택하는 방식이 있습니다. 이 문제의 경우 파싱된 수가 Int 범위를 넘을 수 있기 때문에 첫 번째 방식으로 진행하지 않고 두 번째 방식으로 진행했습니다.

다음은 코드입니다.

import java.util.*;

class Solution {
    static boolean isPrimeNum(long num){
        if(num==1) return false;
        if(num==2) return true;
        
        for(int i=2;i<=(int)Math.sqrt(num);i++){
            if(num%i==0) return false;
        }
        return true;
    }
    
    public int solution(int n, int k) {
        // k진수로 변환 및 0으로 파싱
        int answer = 0;
        String num = Integer.toString(n,k);
        String[] arr = num.split("0");
        
        for(int i=0;i<arr.length;i++){
            if(arr[i].equals("")) continue;
            
            long curr = Long.parseLong(arr[i]);
            if(isPrimeNum(curr)) answer++;
        }
        
        return answer;
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보