알고리즘/카카오기출

[Python] programmers k진수에서 소수 개수 구하기

정찡이 2022. 1. 22. 12:54
728x90

1. 문제 링크

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

 

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

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

programmers.co.kr

2. 문제 요약

진수 변환 후 0을 기준으로 나눠서 소수의 개수를 출력하기

 

 

3. 아이디어 정리

  1. 진수 변환
  2. 0을 기준으로 쪼갠다
  3. 각 쪼갠 수에 대해 소수 판별 진행

 

4. 문제 풀이

4-1. 내 풀이

import string
import math

tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    """
    진수 변환 후 0을 기준으로 나눠서 소수 판별 
    :param num:
    :param base:
    :return:
    """
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r]
    else :
        return convert(q, base) + tmp[r]

def is_prime_number(x):
    """
    소수 판별
    :param x:
    :return:
    """
    for i in range(2, int(math.sqrt(x)) + 1):
        if x % i == 0:
            return False
    return True

def solution(n, k):
    answer = 0
    convert_num = convert(n, k)
    for i in convert_num.split('0'):
        if i:   # 빈값이 아닌 경우
            if int(i) == 1:
                continue
            elif is_prime_number(int(i)):  # 소수인 경우 + 1
                answer += 1

    return answer

print(solution(n=110011,k=10))

 

 

5. 결론

  • 구현