데이터사이언스 기록기📚

[프로그래머스/Python] Level 2_k진수에서 소수 개수 구하기 (2022 KAKAO BLIND RECRUITMENT) 본문

Coding Test/프로그래머스(Python)

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

syunze 2023. 11. 12. 19:27

📌문제 유형

2022 KAKAO BLIND RECRUITMENT

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

import math

# 10진수 -> k진수
def change(n,k):
    tmp = ''
    while n > 0:
        n, mod = n//k, n%k
        tmp += str(mod)
        
    return tmp[::-1]

# 소수 구별(에라토스테네스의 체)
def prime(x):
    # 1인 경우는 여기서 판단
    if x <= 1:
        return False
    for i in range(2,int(math.sqrt(x)+1)):
        if x % i == 0:
            return False
    return True
    
    
def solution(n, k):
    answer = 0
    change_n = change(n,k)
    
    check = ''
    for num in change_n:
        if num != '0':
            check += num
        else:
            if check != '':
                ans = prime(int(check))
                if ans == True:
                    answer += 1
            check = ''
            continue
            
    if check != '':
        ans = prime(int(check))
        if ans == True:
            answer += 1
        
    return answer

 

📌다른 사람들의 풀이

# n을 k진법으로 나타낸 문자열 반환
def conv(n, k):
    s = ''
    while n:
        s += str(n%k)
        n //= k
    return s[::-1]

# n이 소수인지 판정
def isprime(n):
    if n <= 1: return False
    i = 2
    while i*i <= n:
        if n%i == 0: return False
        i += 1
    return True

def solution(n, k):
    s = conv(n,k)
    cnt = 0
    for num in s.split('0'):
        if not num: continue # 빈 문자열에 대한 예외처리
        if isprime(int(num)): cnt += 1
    return cnt

 

📌리뷰

- 1은 소수에 포함하지 않도록 소수 코드에서 걸러내기

- 기억해야할 코드

  • N을 K진법으로 바꾸기
def change(n,k):
	tmp = ''
    while n > 0:
    	n, mod = n//k, n%k
        tmp += mod
    return tmp[::-1]

 

  • 에라토스테네스의 체
def prime(x):
    if x <= 1:
        return False
    for i in range(2,int(math.sqrt(x)+1)):
        if x % i == 0:
            return False
    return True

 

728x90
Comments