프로그래머스/Level_2

[Level_2 / C++ / 카카오] k진수에서 소수 개수 구하기

배발자 2022. 1. 25.
반응형

1. 10진수로 주어진 숫자를 k진수로 변환후 문자열로 저장

2. 소수를 담을 long long 타입의 벡터 생성 후 문자열에서 숫자에 해당되는 부분들을 담기. 

3. 소수인지 아닌지 판단하는 함수 호출 

 

"2 ~ 루트(n)" 에 해당하는 값으로 n을 나눈다.

나누어진다면 false 반환
그렇지 않다면 true 반환

 

소수 판별법, 왜 루트 N 이하의 수만 나눠보면 되는 것일까?

에라토스테네스의 체 라는 개념을 읽어보면 n이 소수인지 아닌지 판별하기 위해서는 sqrt(n) 이하의 수만 나눠보면 된다고 한다. (sqrt는 루트를 의미함) 근데 왜 sqrt(n) 이하의 수를 나눠보면 알 수

makedotworld.tistory.com

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
typedef long long ll; 
bool is_prime(ll n) {
    if(n < 2) return false;
    for(int i=2; i<=sqrt(n); ++i) {
        if(n % i == 0) return false;
    }    
    return true;
}
int solution(int n, int k) {   
    int answer = 0;
    string s=""; int prev=0; 
    while(n){
        s+=(n%k)+'0';  
        n/=k; 
    }
    reverse(s.begin(),s.end());
    cout << s << endl;
    string temp ="";
    vector <ll> prime;
    for(int i=0; i<s.size(); i++){
        if(s[i]>='1'&&s[i]<='9')temp+=s[i];         
        else{
            if(!temp.empty()){
                prime.push_back(stoll(temp)); 
                temp=""; 
            }
        }
    }
    if(temp.size())prime.push_back(stoll(temp));     
    for(int i=0; i<prime.size(); i++) if(is_prime(prime[i])) answer++ ;      
    return answer;
}

 

 

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

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

programmers.co.kr

 

반응형

댓글