본문 바로가기

개발/algorithm

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

문제 링크

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

 

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

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

programmers.co.kr

 

풀이 

1. 주어진 진법으로 변환한 뒤 0을 기준으로 나눠준다. 

2. 분리된 숫자에 대해서 소수인지 판별

소수 구하는 함수 설명은 아래 참고 

https://zzion2.tistory.com/129 

 

[백준 1929번] 소수 구하기 -python

문제링크 https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진..

zzion2.tistory.com

# n의 base 진법으로 나타낸 수 구하기 
def cal(n, base):
    ans = ''
    while n > 0 :
        n, r = divmod(n, base)
        ans += str(r)
    
    return ans[::-1]
    
def solution(n, k):
    # 변환한 수 
    c_num = cal(n,k)
    # 소수의 개수 
    cnt = 0 
    # '0' 기준으로 나누기 
    num_list = c_num.split('0')
    
    for num in num_list:
        # 연속된 0의 경우 ''가 나타날 수 있으므로 
        if num == '':
            continue 
        
        num = int(num)
        
        # 소수 판별하기 
        result = True 
        if num == 1 :
            continue 
        
        for i in range(2, int(num**0.5)+1):
            if num % i == 0:
                result = False 
                break 
            
        if result :
            cnt += 1 
            
    return cnt