항해99 코테
99클럽 코테 스터디 1일차 TIL + 소수 구하기
탱도시락
2025. 3. 31. 20:30
✅ 오늘의 학습 키워드
소수 구하기 (백준 문제)
✅ 공부한 내용
소수(Prime Number)란?
1과 자기 자신을 제외하고 나누어 떨어지는 약수가 없는 자연수
✅ 오늘의 회고
소수 판별 문제에서 단순 구현 시 O(N²) 시간복잡도가 나와 시간초과 발생
- 처음 작성한 코드:
bool isPrime(int n) {
if (n < 2)
return false;
for (int i = 2; i < n; i++) { // 이 부분이 문제가 있음
if (n % i == 0) {
return false;
}
}
return true;
}
- 제곱근까지만 검사하는 방식으로 개선:
bool isPrime(int n) {
if (n < 2)
return false;
for (int i = 2; i * i <= n; i++) { // 제곱근으로 최적화
if (n % i == 0) {
return false;
}
}
return true;
}
- 시간복잡도가 O(N²)에서 O(N√N)으로 개선됨
✅ 전체 코드
#include <iostream>
using namespace std;
bool isPrime(int n) {
if (n < 2)
return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int M, N;
int cnt;
cin >> M >> N;
for (int i = M; i <= N; i++) {
if (isPrime(i)) {
cout << i << '\n';
}
}
return 0;
}
✅ 새롭게 알게 된 점
- 소수 판별 시 제곱근까지만 검사해도 충분한 이유: N = a×b 형태일 때 a와 b 중 하나는 반드시 √N 이하
- 문제의 제한 조건(N의 크기)을 보고 적절한 알고리즘을 선택하는 방법
- N ≤ 1,000,000인 경우 O(N²)는 시간초과, O(N√N) 또는 O(N log log N) 알고리즘이 필요
✅ 내일 학습할 것
- 시간복잡도를 개선하기 위해 에라토스테네스의 체 구현 방법 심화 → O(N log log N)으로