- 최대한 효율적으로 구성하고자 에라토스테네스의 체 활용

- 2~n의 제곱근까지의 수에 대하여, 각각의 수들을 2,3,4,5,6,...배 해 나가면서 소수가 아니다.. 라고 체크해주는 방식. 문제에서는 최대 1000000까지 이므로 1000000의 제곱근까지

- 이후 소수의 개수를 구해주면 끝


import math
def solution(n):
    odd = [True] * 1000001
    odd[1] = False
    odd[0] = False
    for i in range(2, int(math.sqrt(1000000))+1):
        if odd[i] == False:
            continue
        for j in range(i*2, 1000001, i): # 배수들 검사
            odd[j] = False

    answer = 0
    for i in range(1, n+1):
        if odd[i] == True:
            answer += 1

    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 2 ] 오픈채팅방  (0) 2021.06.21
[Lv 2] 멀쩡한 사각형  (0) 2021.06.20
[Lv 2] 짝지어 제거하기  (0) 2021.06.20
[Lv 2] 124 나라의 숫자  (0) 2021.06.20
[Lv 1] 이상한 문자 만들기  (0) 2021.06.19

+ Recent posts