본문 바로가기
Algorithm/프로그래머스풀이

[알고리즘 문제풀이] 프로그래머스 - K진수에서 소수 개수 구하기 /JAVA

by 계범 2022. 1. 30.

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

 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

/**
    1. n 숫자 k진수로 변환
    1-1) n %k = 나머지를 놔두고, /10씩해서 구하기
    
    2. 변환된 숫자를 조건에 따라 분할
    2-1) String k진수를 0을 만날때마다 분할
    
    3. 해당 조건의 숫자가 소수인지 확인
    
    4. 맞으면 개수 추가
    
**/

import java.util.*;
import java.io.*;

class Solution {
    
    public ArrayList<Long> checkNum = new ArrayList<>();
    public int answer = 0;
    
    public int solution(int n, int k) {
        
        parsingK(n,k);
        checkPrime();
        
        return answer;
    }
    
    public void checkPrime(){
        for(long v: checkNum){
            if(prime(v)) answer++;
        }
    }
    
    // 소수판별
    public boolean prime(long v){
        if(v < 2) return false;
        
        if(v == 2) return true;
        
        for(long i = 2; i <= Math.sqrt(v); i++){
            if(v%i == 0){
                return false;
            }
        }
        
        return true;
    }
    
    public void parsingK(int n, int k){
        String str = "";
        String temp = "";
        while(n > 0){
            str = String.valueOf(n%k) + str;
            n/= k;
        }
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            if(c == '0'){
                if(!temp.isEmpty()){
                    checkNum.add(Long.parseLong(temp));
                    temp = "";
                }
            }else{
                temp += c +"";
            }
            
            if(i == str.length()-1){
                if(!temp.isEmpty()){
                    System.out.println(temp);
                    checkNum.add(Long.parseLong(temp));
                }
            }
        }
    }
}

댓글