풀이과정
이 문제는 에라토스테네스의 체 알고리즘을 활용하는 문제이다.
효율성 테스트를 넘어가기 위해서 소수 찾기 문제들은 다 에라토스테네스의 체를 사용해야 하는 것 같다.
풀이 1
#include <string>
#include <vector>
#include <cmath>
using namespace std;
const int NUM = 1000001;
int prime[NUM];
void PrimeNum(){
for(int i = 2; i <= NUM; i++){
prime[i] = i;
}
for(int i = 2; i <= sqrt(NUM); i++){
// prime[i]이 0이라면 이미 소수가 아니므로 넘어감
if(!prime[i]) continue;
for(int j = i * i; j <= NUM; j += i){
prime[j] = 0;
}
}
}
int solution(int n) {
int answer = 0;
PrimeNum();
for(int i = 2; i <= n; i++){
if(prime[i]) answer++;
}
return answer;
}
풀이 2
#include <string>
#include <vector>
using namespace std;
const int NUM = 1000001;
int prime[NUM];
// sqrt함수 구현
int sqrt(int n){
int s = 0;
int t = 0;
s = n / 2;
while(s != t){
t = s;
s = ((n / t) + t) / 2;
}
return s;
}
void PrimeNum(){
for(int i = 2; i <= NUM; i++){
prime[i] = i;
}
for(int i = 2; i <= sqrt(NUM); i++){
if(!prime[i]) continue;
for(int j = i * i; j <= NUM; j += i){
prime[j] = 0;
}
}
}
int solution(int n) {
int answer = 0;
PrimeNum();
for(int i = 2; i <= n; i++){
if(prime[i]) answer++;
}
return answer;
}
'🍞 Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스][Level1] 약수의 개수와 덧셈 c++ (0) | 2022.09.02 |
---|---|
[프로그래머스][Level1] 수박수박수박수박수박수? c++ (0) | 2022.09.02 |
[프로그래머스][Level1] 서울에서 김서방 찾기 c++ (0) | 2022.09.02 |
[프로그래머스][Level1] 최소 직사각형 c++ (0) | 2022.09.02 |
[프로그래머스][Level1] [1차] 다트 게임 c++ (0) | 2022.09.02 |