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
반응형
'◆C# > C# : 프로그래머스 문제 풀이' 카테고리의 다른 글
[프로그래머스] 모의고사 / C#, C++ (1) | 2024.11.26 |
---|---|
[프로그래머스] 최대공약수와 최소공배수 / C++ 풀이 (0) | 2024.11.26 |
[프로그래머스] 숫자 문자열과 영단어 / C++ 풀이 (0) | 2024.11.25 |
[프로그래머스] 카드 뭉치 / C++ 풀이 (0) | 2024.11.25 |
[프로그래머스] 같은 숫자는 싫어 / C++ 풀이 (0) | 2024.11.25 |