Algorithm/수학

[프로그래머스 lv1] 소수 찾기

09009 2023. 9. 26. 13:29

문제 보기

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

 

프로그래머스

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

programmers.co.kr

 

문제 해결

에라토스테네스의 체를 이용하여 해결한다.

1. 1은 제거한다.
2. 지워지지 않은 수 중에서 제일 작은 2를 소수로 채택하고, 나머지 2의 배수를 모두 제거한다.
3. 지워지지 않은 수 중에서 제일 작은 3을 소수로 채택하고, 나머지 3의 배수를 모두 제거한다.
4. 지워지지 않은 수 중에서  제일 작은 5를 소수로 채택하고, 나머지 5의 배수를 모두 제거한다.
5. (반복한다)

참고: https://wikidocs.net/21638

https://velog.io/@iamjinseo/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%A0%88%EB%B2%A81%EC%86%8C%EC%88%98-%EC%B0%BE%EA%B8%B0-python

 

2. 소수 구하기 - 에라토스테네스의 체

# 소수 : 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수이다. # 코딩 소수인지 검사하는 함수(isPrime)를 만든다. 1부터 100 사이의 소수를 구하는 파이…

wikidocs.net

 

소스 코드

def solution(n):
    a = [False, False] + [True]*(n-1)
    primes = []
    
    for i in range(2, n+1):
        if a[i]:
            primes.append(i)
            for j in range(2*i, n+1, i): 
                a[j] = False
    return len(primes)