본문 바로가기
알고리즘 문제풀이/프로그래머스

[프로그래머스 2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기

by 선서니 2023. 7. 3.

 

[문제 바로가기]👇

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💡풀이💡

1. 숫자 n을 k 진수로 변환하기

    1) n을 k로 나눈 나머지를 역순으로 StringBuilder에 저장하는 방법

    2) Integer.toString()을 이용해 바로 n을 k진수로 변환한 후 String으로 저장하는 방법

 

2. 조건에 맞는 소수 찾기

  • 찾고 있는 소수는 0을 기준으로 나눠지기 때문에 0으로 구분 

 

전체 코드 :: n을 k로 나눈 나머지를 역순으로 StringBuilder에 저장

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

class Solution {
	public int solution(int n, int k) {
        // 1. n을 k 진수로 변환
        String changedNum = changeNum(n, k);

        // 2. 조건에 맞는 소수 찾기
        StringTokenizer st = new StringTokenizer(changedNum, "0");
        int answer = 0;
        while(st.hasMoreTokens()) {
            String token = st.nextToken();

            if(isPrime(Long.parseLong(token))) answer++;
        }
        
        return answer;
    }
    
    public String changeNum(int n, int k) {
        if(k == 10) return Integer.toString(n);
        
        StringBuilder sb = new StringBuilder();
        while(n > 0) {
            sb.insert(0, n % k);
            n = n / k;
        }
        return sb.toString();
    }

    // 소수 확인
    public boolean isPrime(long num) {
        if(num == 1) return false;

        for(int i=2; i<= (long)Math.sqrt(num); i++) {
            if(num %i == 0) return false;
        }
        return true;
    }
}

 

전체 코드 :: Integer.toString()을 이용

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

class Solution {
    public int solution(int n, int k) {
        // 1. n을 k 진수로 변환
        String changedNum = Integer.toString(n, k);

        // 2. 조건에 맞는 소수 찾기
        StringTokenizer st = new StringTokenizer(changedNum, "0");
        int answer = 0;
        while(st.hasMoreTokens()) {
            String token = st.nextToken();
            
            if(isPrime(Long.parseLong(token))) answer++;
        }
        
        return answer;
    }
    
    // 소수 확인
    public boolean isPrime(long num) {
        if(num == 1) return false;
        
        for(int i=2; i<= (long)Math.sqrt(num); i++) {
            if(num %i == 0) return false;
        }
        return true;
    }
}

댓글