99클럽 코테 스터디 1일차 TIL + 소수 구하기

2025. 4. 1. 03:21·📝 끄적끄적/항해99 코테 스터디
목차
  1. - 오늘의 학습 키워드
  2. - 풀이
  3. - 오늘의 회고

https://www.acmicpc.net/problem/1929

 

 

 

- 오늘의 학습 키워드

에라토스테네스의 체 (소수 판별 알고리즘)

- 풀이

M 이상 N 이하의 모든 소수를 출력해야 하기 때문에,
일일이 하나씩 검사하면 시간 초과가 날 수 있어서 효율적인 소수 판별 방법인
에라토스테네스의 체 알고리즘을 사용해야 한다.

 


      
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt(); // 시작 값
int N = sc.nextInt(); // 끝 값
// 소수 판별을 위한 배열 (true면 소수라고 가정함)
boolean[] isPrime = new boolean[N + 1];
// 초기화 - 2 이상은 모두 소수(true)로 설정
for (int i = 2; i <= N; i++) {
isPrime[i] = true;
}
// 에라토스테네스의 체
for (int i = 2; i * i <= N; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= N; j += i) {
isPrime[j] = false; // i의 배수는 소수가 아님
}
}
}
// M부터 N까지의 숫자 중 소수만 출력
for (int i = M; i <= N; i++) {
if (isPrime[i]) {
System.out.println(i);
}
}
}
}

 

풀이 순서

  1. boolean[] isPrime 배열을 만들어 0~N까지 소수 여부를 저장
  2. 2부터 √N까지 반복하면서, i의 배수를 전부 false 처리
  3. M부터 N까지 순회하며 isPrime[i]가 true인 숫자만 출력

 

에라토스테네스의 체는 소수를 빠르게 구하는 대표적인 방법으로, 2부터 시작해서 해당 수의 배수를 지워나가는 방식이다.

 

예를 들어 1부터 10까지의 수에서 소수를 구해보자.
1은 소수가 아니므로 제외하고, 2부터 10까지 살펴본다.

  • 2는 소수이므로, 2의 제곱(4)부터 2의 배수들을 지운다 → 4, 6, 8, 10
  • 3은 소수이므로, 3의 제곱(9)부터 배수를 지운다 → 9
  • 다음 숫자 4는 이미 지워졌으므로 건너뛴다.

이때 우리가 찾고자 하는 수는 10까지이므로, 제곱했을 때 10을 넘지 않는 소수까지만 검사하면 된다.
즉, √10 이하의 소수까지만 배수를 지우면 된다 → 2와 3까지만 체크!

 

결과적으로 지워진 수는 4, 6, 8, 9, 10이고, 남은 수는 2, 3, 5, 7 → 이들이 소수가 된다.
이게 에라토스테네스의 체 방식이다.

 

그리고BufferedReader와 BufferedWriter 사용해서 입출력 속도도 개선해 보았다.

위에서 부터 이 순서로 해본 결과다

1. BufferedReader + BufferedWriter

2. BufferedReader + System.out.println

3. Scanner + System.out.println

 

- 오늘의 회고

처음에는 M부터 N까지 하나하나 소수인지 검사하려고 했는데, 범위가 최대 1,000,000이라서 시간 초과가 날 것 같았다.

그래서 시간 초과를 막기 위해 에라토스테네스 체를 오랜만에 찾아본 다음 시도했다.

소수 판별에는 단순 나눗셈보다 체 알고리즘이 훨씬 빠르다는 걸 체감했다. 이래서 수학 잘하는 사람들이 코테를 잘하는건가..

 

 

 

 

저작자표시 비영리 (새창열림)

'📝 끄적끄적 > 항해99 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 10일차 TIL + 병든 나이트  (0) 2025.04.12
99클럽 코테 스터디 9일차 TIL + 저울  (0) 2025.04.10
99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지  (0) 2025.04.10
99클럽 코테 스터디 7일차 TIL + 쇠막대기  (0) 2025.04.09
99클럽 코테 스터디 6일차 TIL + 섬의 개수  (0) 2025.04.08
99클럽 코테 스터디 2일차 TIL + 피보나치 비스무리한 수열  (0) 2025.04.02
  1. - 오늘의 학습 키워드
  2. - 풀이
  3. - 오늘의 회고
'📝 끄적끄적/항해99 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지
  • 99클럽 코테 스터디 7일차 TIL + 쇠막대기
  • 99클럽 코테 스터디 6일차 TIL + 섬의 개수
  • 99클럽 코테 스터디 2일차 TIL + 피보나치 비스무리한 수열
현주먹
현주먹
끄적끄적 개발.log
  • 현주먹
    현주먹의 개발로그
    현주먹
  • 전체
    오늘
    어제
    • 전체글 (162)
      • 👶🏻 CS (15)
        • Operating System (8)
        • Database (4)
        • Data Structure (2)
        • Software Engineering (1)
      • 💻 Dev (54)
        • Java & OOP (24)
        • Spring (4)
        • JPA (5)
        • Test Code (1)
        • Database (1)
        • JSP & Servlet (13)
        • Etc (6)
      • 💡 Algorithm (25)
        • 인프런 (9)
        • 백준 (16)
      • 🛠 DevOps & Tool (11)
        • Linux (4)
        • AWS (1)
        • Git (2)
        • Etc (4)
      • 📝 끄적끄적 (57)
        • 후기 및 회고 (5)
        • TDD, 클린 코드 with Java 17기 (3)
        • F-Lab (23)
        • 🖥️ 자바의 정석 (11)
        • 📖 Clean Code (3)
        • 항해99 코테 스터디 (11)
  • 블로그 메뉴

    • 🐈‍⬛ GitHub
    • TIL
  • 인기 글

  • 태그

    코딩테스트준비
    객체지향
    코테스터디
    인프런 특정문자뒤집기
    티스토리챌린지
    백준
    f-lab 후기
    til
    오라클
    TDD 클린 코드 with Java
    PostGreSQL함수
    백준10250
    자바의정석
    데브클럽
    자바의신절판
    NextSTEP
    C
    JPA
    99클럽
    오블완
    개발자취업
    에프랩
    ==와 equals()
    항해99
    에프랩 후기
    개발자멘토링
    F-Lab
    jsp
    로또 미션
    인프런 단어뒤집기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
현주먹
99클럽 코테 스터디 1일차 TIL + 소수 구하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.