[프로그래머스 Lv2.] k진수에서 소수 개수 구하기(python)

gayoung·2022년 3월 12일
0

알고리즘

목록 보기
2/50
post-thumbnail

1. 문제

문제 설명

제한사항

입출력 예시

입출력 예 설명


2. 풀이 과정

내가 생각한 진행 과정

  • k진수로 바꾸기
    • 10을 3진수로 한다면? -> 1010
    • 거꾸로 읽어야함 -> 나머지를 문자로 가지고와야함
  • '0'을 기준으로 나눈 후 나뉘어진 수가 소수인지 확인
    • 만약, 110011이면, ['11', '', '11']이렇게 나옴! -> 공백인 경우는 소수인지 확인X

최종 코드

def isPrime(x):
    for i in range(2, int(x ** 0.5) + 1):  # TypeError: 'float' object cannot be interpreted as an integer에러는 range에서 정수부터 정수까지 진행되어야하는데 x**0.5는 소수가 나올 수 있다. 이를 정수로 바꿔줘야함.
        if x % i == 0:
            return False
    return True

def solution(n, k):
    k_word = ''

	# k진수로 표현
    while n:
        n, mod = divmod(n, k)
        k_word += str(mod)
    k_word = k_word[::-1]

    temp = k_word.split('0')

    answer = 0
    for t in temp:
        if t:  # temp='110011'이면 temp=['11', '', '11']이므로 공백이 아닌경우만 소수인지 판별해야함
            if int(t) >= 2 and isPrime(int(t)):
                answer += 1

    return answer

발생했던 문제

1. TypeError: 'float' object cannot be interpreted as an integer

  • 소수 구할 때, x**0.5까지만 구하면 됨.
  • 이때, range(정수, 정수)인데, x**5가 정수가 아닐 수 있음 -> 따라서 int로 정수화 시켜줘야함

0개의 댓글

Powered by GraphCDN, the GraphQL CDN