데이터와 코드로 세상을 바라봅니다.

[Python3] 알고리즘 : 프로그래머스 - 소수찾기 본문

Code/Python

[Python3] 알고리즘 : 프로그래머스 - 소수찾기

코드우드 2021. 1. 20. 17:49
def check_prime(a):
    answer = True
    
    for i in range(2,a) :
        if a % i == 0:
            answer = False
            break

    return answer


def solution(n):
    answer = 0
    prime_list = list(range(2,n+1))
    
    for i in prime_list :
        if check_prime(i) == True :
            answer += 1
            
            for k in range(2, int(n/i)) :
                if (i*k) in prime_list :
                    prime_list.remove(i*k)        
    
    return answer

속도가 안나온다... 

그래서, 방법을 찾아본다.... 에라토스 테네법 이라는데... 모르겠다... 배수를 제거하는 대로 짰는데, 

blog.metafor.kr/193

 

[python](프로그래머스)소수 찾기

문제 설명 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조

blog.metafor.kr

def check_prime(a):
    answer = True
    
    for i in range(2,a) :
        if a % i == 0:
            answer = False
            break

    return answer


def solution(n):
    answer = 0
    prime_list = []
    
    for i in range(2,n+1) :
        is_prime = True
        for j in prime_list :
            if i % j == 0 :
                is_prime = False
                break
        
        if is_prime == True :
            prime_list.append(i)
            answer += 1            
        
    
    return answer

여전히 속도가 안나온다.... 

결국 남의 코드 참고... 

def solution(n):
    answer = 0
    set_n = set(range(2,n+1))
    for i in range(2,n+1) :
        set_n -= set(range(2*i,n+1,i))            
    answer = len(set_n)
    
    return answer​