[Python] 백준/BOJ 2960번: 에라토스테네스의 체 (Silver 4)

2025. 2. 17. 11:00·Algorithm/백준 (BOJ)
반응형

💻 Problem

문제 보러 가기

 

에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.

이 알고리즘은 다음과 같다.

  1. 2부터 N까지 모든 정수를 적는다.
  2. 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
  3. P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
  4. 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.

N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.

 

✏️ Solution 1

import sys
input = sys.stdin.readline

n, k = map(int, input().split())
num = [i for i in range(2, n + 1)]

while num:
    p = num.pop(0)
    k -= 1

    if k == 0:
        print(p)
        break

    for i in range(p * 2, n + 1, p):
        if i in num:
            num.pop(num.index(i))
            k -= 1

            if k == 0:
                print(i)
                exit(0)

문제에서 주어진 1~4를 직관적으로 푼 방법이다.

 

✏️ Solution 2

import sys
input = sys.stdin.readline

n, k = map(int, input().split())

# 2부터 n까지의 숫자가 지워졌는지 여부를 나타내는 체
sieve = [True] * (n + 1)

for i in range(2, n + 1):
    # 아직 지워지지 않은 경우
    if sieve[i]:
        # i의 배수를 모두 제거
        for j in range(i, n + 1, i):
            if sieve[j]:
                sieve[j] = False
                k -= 1
                
                # k번째로 지워진 수 찾기
                if k == 0: 
                    print(j)
                    exit()

에라토스테네스의 체로 푼 코드이다.

정확히는 sieve의 index 0, 1의 값은 False여야 한다.

에라토스테네스의 체의 시간복잡도는 O(n log log n)이다.

반응형

'Algorithm > 백준 (BOJ)' 카테고리의 다른 글

[Python] 백준/BOJ 15965번: K번째 소수 (Silver 2)  (6) 2025.02.19
[Python] 백준/BOJ 19699번: 소-난다! (Silver 2)  (0) 2025.02.18
[Python] 백준/BOJ 1389번: 케빈 베이컨의 6단계 법칙 (Silver 1)  (2) 2025.02.16
[Python] 백준/BOJ 18870번: 좌표 압축 (Silver 2)  (0) 2025.02.15
'Algorithm/백준 (BOJ)' 카테고리의 다른 글
  • [Python] 백준/BOJ 15965번: K번째 소수 (Silver 2)
  • [Python] 백준/BOJ 19699번: 소-난다! (Silver 2)
  • [Python] 백준/BOJ 1389번: 케빈 베이컨의 6단계 법칙 (Silver 1)
  • [Python] 백준/BOJ 18870번: 좌표 압축 (Silver 2)
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (197) N
      • SSAFY (10)
      • Algorithm (115) N
        • 이론 (6)
        • 백준 (BOJ) (108) N
        • 프로그래머스 (1)
      • Trouble Shooting (9)
      • Frontend (6)
      • React (17)
      • Next.js (4)
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (9)
        • JavaScript (0)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dfs
    중복조합
    구현
    Error
    SSAFY
    백트래킹
    Java
    티스토리챌린지
    DP
    Next.js
    힙
    오블완
    블록체인
    bfs
    파이썬
    React
    SSAFYcial
    재귀
    Heap
    순열
    백준
    알고리즘
    강의
    우선순위큐
    수학
    중복순열
    싸피
    브루트포스
    Algorithm
    html5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[Python] 백준/BOJ 2960번: 에라토스테네스의 체 (Silver 4)
상단으로

티스토리툴바