[프로그래머스 LV2] k진수에서 소수 개수 구하기

Junyoung Park·2022년 1월 22일
2

코딩테스트

목록 보기
47/631

1. 문제 설명

k진수에서 소수 개수 구하기

2. 문제 분석

주어진 수 n을 k진수로 변환한 뒤, 0P0/0P/P0/P와 같은 케이스에 따라 소수의 전체 개수를 구하는 문제이다. 이 케이스는 따로 분류할 필요 없이 k진법으로 변환한 수를 0을 기준으로 split한 각 수가 소수인지 아닌지를 확인하면 된다. 10진수 n을 k진법으로 변환하는 convert 함수 및 주어진 수가 소수인지 아닌지를 검사하는 is_prime은 기억하고 있자.

  1. 10진수 n을 k진법으로 변환하기
1. n을 k로 나눈 몫과 나머지를 구한다.
2. 나머지를 이어서 붙여준다. n은 k로 나눈 몫이 된다.
3. n이 0 이하가 되면 멈춘다.
4. result를 거꾸로 반환한다.
  1. 주어진 수 num이 소수인지 아닌지를 검사하기
1. 2부터 num의 제곱근까지 수 i를 num에 나눈 나머지가 0이 아닌지 검사한다.
2. 도중 0이 나온다면 소수가 아니므로 False를 return한다.
3. 모두 0이 아니라면 소수이므로 True를 return한다.
4. 주어진 수 num은 2 이상이어야 하므로 1 여부를 사전에 커버한다.

3. 나의 풀이

def convert(n, k):
    result = ''
    while n > 0:
        n, mod = divmod(n, k)
        result += str(mod)
    return result[::-1]

def is_prime(num):
    if num == 1: return False

    for i in range(2, int(num**0.5)+1):
        if num % i == 0: return False
    return True


def solution (n, k):
    k_ary= convert(n, k)
    total = 0
    for num in k_ary.split('0'):
        if num.isdigit():
            if is_prime(int(num)):
                total += 1
    return total
profile
JUST DO IT

0개의 댓글