안녕 세상아,

[프로그래머스/c++] Lv1 소수 찾기 본문

프로그래머스

[프로그래머스/c++] Lv1 소수 찾기

돈 많은 백수가 되고싶다 2024. 10. 23. 14:22

https://school.programmers.co.kr/learn/courses/30/lessons/12921

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

간단하게 2중 for문으로 구할 수 없는 문제이다. 이유는 시간 초과..효율성이 매우 떨어진다. 

주어진 조건은 n이 1000000 이하기 때문에 n이 굉장히 커진다. 

 

해결할 수 있는 방법은 에라토스테네스의 체를 사용하면 된다. 

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    int arr[1000001];
    
    for(int i=2;i<=n;i++){
        arr[i]=i;
    }
    
    for(int i=2;i<=n;i++){
        if(arr[i]==0)
            continue;
        for(int j=i+i;j<=n;j+=i){
            arr[j]=0;
        }
    }
    for(int i=2;i<=n;i++){
        if(arr[i]!=0)
            answer++;
    }
    return answer;
}


https://hello-world-cpp.tistory.com/25

 

[c++/알고리즘] 에라토스테네스의 체

에라토스테네스의 체는 유명한 소수 구하기 문제이다. 시간 복잡도가 O(N^1/2)이기 때문에 많은 양의 소수를 구할 때 유용하게 사용할 수 있다. 원리는 간단하다. 2의 배수인 수를 모두 지운 후 2는

hello-world-cpp.tistory.com

정리해놨다.