본문 바로가기
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));
                    }
                }
            }
        }
    }

    댓글