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

yujeongkwon·2022년 8월 13일
0

프로그래머스 / PYTHON

목록 보기
57/77
post-custom-banner

문제설명

k진수에서 소수 개수 구하기
양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.

0P0처럼 소수 양쪽에 0이 있는 경우
P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우
0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우
P처럼 소수 양쪽에 아무것도 없는 경우
단, P는 각 자릿수에 0을 포함하지 않는 소수입니다.
예를 들어, 101은 P가 될 수 없습니다.

정수 n과 k가 매개변수로 주어집니다. n을 k진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return 하도록 solution 함수를 완성해 주세요.

풀이 & Comment

저번에도 에라토스테네스 체로 풀었다가 커브했던 거 같은데
k진수로 변환하면 해당 수를 다시 10진수로 보았을 때 n 보다 커진다는 생각을 못했음

코드

옛날 코드

import math
def c_convert(num,n):
    t = '0123456789'
    q,r = divmod(num,n)
    return c_convert(q,n) + t[r] if q else t[r]

def solution(n, k):
    answer = c_convert(n,k)
    answer = answer.strip('0').split('0')
    i = 0
    while i <len(answer):
        if answer[i]== '' or answer[i] =='1':  
            answer.remove(answer[i])
            i -= 1
        else:
            answer[i] = int(answer[i])
            for j in range(2,int(math.sqrt(answer[i]))+1):
                if answer[i] % j == 0: 
                    answer.remove(answer[i])
                    i -= 1
                    break
        i += 1
    return len(answer)

import math
def c_convert(num,n):
    t = '0123456789'
    q,r = divmod(num,n)
    return c_convert(q,n) + t[r] if q else t[r]

def solution(n, k):
    answer = c_convert(n,k)
    answer = answer.strip('0').split('0')
    for i in answer:
        if i== '' or i =='1':  answer.remove(i)
        else:
            i = int(i)
            for j in range(2,int(math.sqrt(i))+1):
                if i % j == 0: 
                    answer.remove(str(i))
                    break
    return len(answer)

현재

def convert(n,k):
    q,r = divmod(n,k)
    return convert(q,k) + str(r) if q !=0 else str(r)

def ispri(n):
    for i in range(2,int(n**0.5)+1):
        if n%i ==0:    return 0
    return 1 

def solution(n, k):
    answer = 0
    n = convert(n,k).split('0')
    for p in n:
        if p != '' and p != '1':    answer += ispri(int(p))
    return answer
profile
인생 살자.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 9월 18일

나는 나는 될거야 권유정이 될거야

답글 달기