Algorithm/프로그래머스

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

자흐니 2022. 2. 10. 18:15

🤔 문제


 

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

 

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

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

programmers.co.kr

😀 풀이


본 문제는 문제 조건에 맞는 단순 구현 문제였습니다.

 

풀이 과정은 아래의 세 단계로 나눌 수 있습니다.


1. 양의 정수 n이 들어왔을 때 이를 소수로 변환하는 과정
2. 문제 조건에 맞게 소수 판단의 대상이 될 숫자들을 확인하는 과정
3. 2번 과정에서 찾은 숫자들이 소수인지 확인하는 과정

위 세 단계에 맞는 함수를 각각 만들었고 구현은 풀이 코드를 보면 쉽게 확인이 가능합니다.

 

1번과 3번의 과정에 해당하는 함수는 각각 진법 변환소수 판단 함수라 어렵지 않게 구현이 가능합니다.

 

대신 2번 과정에서 '0'을 기준으로 split을 하게 된다면 주의할 점이 있는데 '111001'을 '0' 기준 split 하게 되면 기대하는 결과인 [111, 1] 이 나오지 않고 [111, ' ', 1] 이 나오는 것을 알 수 있습니다. 따라서 원하는 결과를 얻기 위해서는 이에 대한 처리를 추가적으로 해줘야 합니다.

 

💻 풀이 코드는 아래와 같습니다.

import math

def convert(n, k): // 진수 변환하는 함수
    result = ''
    while n:
        div, mod = divmod(n, k)
        n = div
        result = str(mod) + result
    return result

def isPrime(n): // 소수 구하는 함수
    if n == 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
             return False
    return True

def getNumberArray(n): // 변환된 수를 보고 문제 조건에 맞게 숫자들을 뽑는 함수
    return map(int, filter(lambda x : x != '', n.split('0')))

def solution(n, k):
    answer = 0
    convertedNumber = convert(n, k)
    numberArray = getNumberArray(convertedNumber)
    for num in numberArray:
        if isPrime(num):
            answer += 1
    return answer
반응형