프로그래머스(Python) 풀이/Level.2

프로그래머스(Python) 92335번 k진수에서 소수 개수 구하기 풀이

개발윗미 2022. 5. 10. 14:48

Python으로 구현한 92335번 k진수에서 소수 개수 구하기 문제 풀이입니다.

 

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

 

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

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

programmers.co.kr


from math import sqrt

def check(data) :
    if data <= 1 :
        return False
    for i in range(2, int(sqrt(data)) + 1) :
        if data % i == 0 :
            return False
    return True

def solution(n, k) :
    answer = 0
    value = ''
    while n > 0 :
        a, b = divmod(n, k)
        n //= k
        value += str(b)

    value = value[::-1]
    for i in value.split('0') :
        if i.isdigit() and check(int(i)) :
            answer += 1

    return answer

 

1. 전달받은 n을 k진수로 변환하여 value에 정의하고, '0'으로 나눠 각 값을 확인하는데 그 값이 숫자이고 소수라면 answer을 1 증가시킨다.

 

2. 소수 판별 check() 함수의 작업은 아래와 같다.

  - 전달받은 data 값이 1 이하라면 False를 반환한다.

  - 2부터 data 값의 제곱근+1 까지를 반복문의 범위로 설정하여 data를 i로 나누었을 때 나누어 떨어진다면 소수가 아니므로 False를 반환한다.

  - 반복문이 끝날때까지도 False가 반환되지 않았다면 True를 반환한다.