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

 

프로그래머스

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

programmers.co.kr


내 풀이

 

import string
import math
tmp = string.digits+string.ascii_lowercase


def solution(n, k):
    count=0
    tmp_result=convert(n,k)
    result = tmp_result.split('0')
    print(result)
    for i in result:
        if len(i)==0:
            continue
        if check_prime(int(i)):
            count +=1
    return count


def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return str(tmp[r]) 
    else :
        return str(convert(q, base) + tmp[r])
def check_prime(n):
    if n==1:
        return False
    for i in range(2,int(math.sqrt((n))) +1 ):
        if n%i==0:
            return False
    return True

몇 가지 가져갈 점이 있다고 생각하는데

1) 10진수를 n번쨰로 변환하는 방법

 

그냥 나눠주면 된다. 다만 여기서 str로 변환한 이유는 문자열 처리 때문이다.

 

 

2) 소수판단하는 방법

흔히들 하는 소수판단법은 2부터 자기자신 -1 까지 나눠지는지 여부를 판단하는 것이다.

기본 아이디어는 같지만, 포인트는 제곱근까지 가능한지 확인 해보면되는것이다. 

가령 16이라고 한다면 원래는 2,~15까지 다 나눠보겠지만 

그게 아니라 2부터 4까지만 확인해보면 되는데 이유는, 간단하다 어차피 그 뒤는 순서가 바꼈을 뿐 같은 수이기 때문이다

2 * 8,  4 * 4 ,
4 * 4,  8 * 2  


다른사람의 풀이

def solution(n, k):
    word=""
    while n:            # 숫자를 k진법으로 변환
        word = str(n%k)+word
        n=n//k
        
    word=word.split("0")  # 변환된 숫자를 0을 기준으로 나눈다.
    
    count=0
    for w in word:
        if len(w)==0:    # 만약 0또는 1이거나 빈공간이라면 continue를 통해 건너뛴다.
            continue
        if int(w)<2:
            continue
        sosu=True
        for i in range(2,int(int(w)**0.5)+1): # 소수찾기
            if int(w)%i==0:
                sosu=False
                break
        if sosu:
            count+=1
            
    return count


 

'취준 > 프로그래머스' 카테고리의 다른 글

행렬의 곱셈 - 파이썬  (0) 2022.09.12
영어 끝말잇기 - 파이썬  (0) 2022.09.12
최고의 집합 - 파이썬  (0) 2022.09.11
주차 요금 계산 - 파이썬  (0) 2022.09.09
캐시 - 파이썬  (0) 2022.09.08

+ Recent posts