[프로그래머스] 2022 KAKAO BLIND RECRUITMENT : K진수에서 소수 개수 구하기(Python)

0

문제 링크

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

0을 포함하지 않은 수를 소수인지 체크하는 문제이기 때문에
진법 처리한 수를 0으로 split해서 소수인지 체크해주면된다.

주의할점은
소수 체크할때 범위를 해당 수의 제곱근까지만 해줘야 시간초과가 뜨지 않는다.
0으로 split했을때 빈문자열이 포함될 수 있으므로 예외처리를 해줘야한다
(본인은 lambda를 이용해서 했지만 다른 사람의 풀이를 보고 나니 어차피 for문 돌리는 김에 안에 예외처리를 했으면 더 깔끔하고 좋을것 같다는 생각을 했다.)

풀이

# K진법 변환
def change(a,b):
    s = ''
    while a>0:
        a, mod = divmod(a,b)
        s += str(mod)
    return str(s[::-1])

# 소수 판별
def check_prime(n):
    if n == 1 : return False
    for i in range(2, int(n**(1/2))+1):
        if n % i == 0:
            return False
    return True 

# solution
def solution(n, k):
	# 빈문자열을 제외한 수의 리스트
    temp = list(map(lambda x: int(x) if x!='' else 1,change(n,k).split('0')))
    count = 0
    for i in temp:
    	# 소수면 count+1
        count += check_prime(i)
    return count

0개의 댓글