inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

1- 11. 1주차 끝 & 숙제 설명

1-11 소수 나열하기 (에라토스테네스의 체)

해결된 질문

55

매콤한각설탕

작성한 질문수 21

0

1. 현재 학습 진도

 

 

2. 시도해보신 내용

def find_prime_list_under_number(number):
    if number <= 1:
        return []

    is_prime = [True] * (number + 1)
    is_prime[0] = is_prime[1] = False # 0과 1은 소수가 아님

    for i in range(2, int(number ** 0.5) + 1): # 2 ~ 루트(number)까지
        if is_prime[i]:
            # i가 소수라면, i의 배수들은 모두 소수가 아님
            for j in range(i*i, number + 1, i):
                is_prime[j] = False


    return [i for i, v in enumerate(is_prime) if v]


기존 풀이보다 에라토스테네스의 체 방식이 직관적인 거 같아서 개선해보았습니다. 기존 방식과 지금 방식 중 무엇이 더 효율적인가요?

python 코딩-테스트 알고리즘 data-structure

답변 1

0

딩코딩코

안녕하세요 좋은 질문 감사합니다!

말씀주신대로 에라토스테네스의 체 방식이 강의에서 다룬 2차 개선 방식보다 더 효율적입니다!

강의의 2차 개선 방식은 각 숫자 n에 대해 기존에 찾은 소수 목록을 순회하면서 i * i > n 조건으로 조기 종료하는 방식입니다. 이 방식은 숫자마다 나눗셈 연산을 반복합니다.

반면 에라토스테네스의 체는 boolean 배열을 미리 만들어두고, 소수를 발견할 때마다 그 배수들을 한 번에 걸러냅니다. 시간복잡도가 O(N log log N)으로, 나눗셈 기반 방식보다 빠르고 메모리 접근 패턴도 단순합니다. 특히 범위가 클수록 차이가 더 크게 납니다.

작성하신 코드도 정확하게 구현되어 있습니다. i*i부터 시작해서 i 간격으로 배수를 제거하는 부분까지 올바르게 적용하신 것 같습니다!! 새로운 시도 넘 좋습니다 ㅎㅎㅎ 좋은 하루 되시길 바랍니다

수강평 이벤트

0

86

2

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

169

2

3-3 정렬-2 선택정렬 로직

0

77

2

링크드 리스트 끝에서 k번째 값 출력하기

0

68

2

LinkedList 과제 Fast, slow 포인터

0

68

2

투포인터 시간복잡도

0

82

2

수강평 작성 후 자료

0

75

2

수업교재 링크 오류

2

135

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

180

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

102

2

문제 풀이 방식 관련 질문입니다!

0

112

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

115

2

수업자료 pdf 받고싶습니다

0

136

2

강의 자료 오류 수정

0

92

1

2-10 더하거나 빼거나 관련 질문입니다

0

82

2

3-8 해쉬 -2

0

65

2

Linked List Element Delete Explanation Problem

0

91

2

강의3-4 스택 탑 문제

0

97

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

127

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

101

2

1874 - 스택 문항

0

95

2

DP Java 예제 자료형 오버플로우 문제

0

123

2

4-9 4주차 숙제중 농심라면 문제

0

143

2

DFS 에서 스택을 사용하는 이유

1

245

3