본문 바로가기

알고리즘

프로그래머스) k진수에서 소수찾기-python

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

문제 설명이 좀 불친절했다.

예시를 들어준 436674에서 101이 왜 0P0을 만족할 수 없는지 이해할 수 없었다.

역시나 입출력 예를 확인했고 여전히 이해할 수 없는 채로 문제를 풀었다.

def convert_notation(n, base):
    T = "0123456789ABCDEF"
    q, r = divmod(n, base)

    return convert_notation(q, base) + T[r] if q else T[r]

def solution(n, k):
    answer = 0
    
    a = convert_notation(n,k)
    
    a = list(a.split('0'))
    
    for i in range(len(a)):
        isTrue = True
        if len(a[i]) == 0:
            continue
        if int(a[i]) < 2:
            continue
        zz = int(a[i])
        for i in range(2,zz):
            if zz % i == 0:
                isTrue = False
                break
        if isTrue:
            answer += 1
        
    return answer

처음 작성한 코드는 무난하게 통과하나 싶었지만 테케1에서 시간아웃으로 실패했다.

0으로 나눈 후 for문에는 아무런 문제가 없어보였고 진수로 변경하는 코드를 수정했다.

 

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

 

'알고리즘' 카테고리의 다른 글

프로그래머스) 압축-python  (0) 2023.01.24
프로그래머스  (0) 2023.01.23
프로그래머스)튜플 -python  (0) 2023.01.20
프로그래머스) 괄호 회전하기-python  (0) 2023.01.20
프로그래머스)[1차] 캐시-python  (0) 2023.01.19