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

jiholee·2022년 1월 24일
0

알고리즘

목록 보기
12/20

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

import math

# num 이 소수면 return 1 아니면 return 0
def isPrime(num):
    if num == 1 or num == 0:
        return 0
    end = int(float(math.sqrt(num))) + 1
    for i in range(2, end):
        if num % i == 0:
            return 0
    return 1
    
def solution(n, k):
    answer = 0
    
    rev_base = ''
    while n > 0:
        n, mod = divmod(n, k)
        rev_base += str(mod)        
    n_k = rev_base[::-1]  # k 진수로 변환한 결과

    candidates = list(n_k.split("0"))
    while "" in candidates:
        candidates.remove("")
    
    for candidate in candidates:
        answer += isPrime(int(candidate))
        
    
    return answer

📌 주의 할 점

  • 2번째 테스트 케이스 110011 는 split(’0’) 하면 candidates에 [’11’., ‘’, ‘11’] 이렇게 나온다. ‘’을 제거하지 않으면 오류 발생함
  • ValueError: invalid literal for int() with base 10오류
    a ='3.2'
    int(a)
    이 예시를 실행하면 에러가 발생한다. int()는 정수문자열(interger string)과 실수만 인수로 받는다.위의 a나 input()으로 실수문자열(float string)을 받을 경우 에러가 발생한다.

    해결방법

    실수문자열을 먼저 float()에 넣어 실수로 바꾸고 int()를 다시 사용한다.
     a ='1.2'
     int(float(a))

0개의 댓글