◆C#/C# : 프로그래머스 문제 풀이

[프로그래머스] 소수찾기 / C++ 풀이

진2_ 2024. 11. 26. 11:12
728x90
반응형

[프로그래머스]  소수찾기 / C++ 풀이

 

📝문제 설명

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

 

🔎 제한사항

  • n은 2이상 1000000이하의 자연수입니다.

🎀입출력 예시

🧐 풀이

 

<시간 초과로 오답>

 

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    for(int i = 2; i <= n ; i++){
        for(int j = 2; j <= i ; j++){
            if(i % j == 0 && i !=j){
                break;
            }else if(i == j){
                answer++;
            }
        }
    }
   
    return answer;
}

 

<정답 - 에라토스테네스의 채 활용>

 

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;

    //에라토스테네스
    vector<bool> isPrime(n+1, true); // 전부 소수라고 가정 
    isPrime[0] = isPrime[1] = false; // 0과 1은 소수가 아님 

    for(int i = 2; i <= n ; i++){
        if(isPrime[i]){ // 소수라면 or 아직 소수가 아님 판정을 받지 않았다면.
            for(long long j = (long long)i *i ; j <= n ; j += i){
                isPrime[j] = false;
            }
        }
    }


    for(int i = 2; i <= n ; i++){
        if(isPrime[i] == true){
            answer++;
        }
    }


    return answer;
}
728x90
반응형