https://programmers.co.kr/learn/courses/30/lessons/12921
방법 1)
시간초과 : 시간 복잡도 O(N^2)
#include <iostream>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
if (n == 1) return answer;
if (n > 1) answer++;
for (int i = 3;i <= n; i++) {
bool flag = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = false; //소수가 아님
break;
}
}
if (flag == true) answer++;
}
return answer;
}
방법 2)
에라토스테네스의 체 : 시간복잡도 O(NlogN)
#include <iostream>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> arr(n + 1);
for (int i = 2; i < arr.size(); i++) {
arr[i] = i;
}
for (int i = 2; i <= n; i++) {
if (arr[i] == 0) //이미 i의 배수들은 다 0으로 체크됐기에 다음 for문 바로 진행
continue;
for (int j = i * 2; j <= n; j = j + i) {
arr[j] = 0;
}
}
for (int i = 2; i <= n; i++) {
if (arr[i] != 0) //0이 아니라는 것은 어떤것의 배수로도 나눠지지않은 것
answer++;
}
return answer;
}
int main() {
//Test Case
cout << solution(10) << endl; //4
cout << solution(5) << endl; //3
}
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
[프로그래머스] 주식가격 : level 2 (0) | 2019.11.05 |
---|---|
[프로그래머스] p와 y찾기 : level 1 (0) | 2019.11.05 |
[프로그래머스] 서울에서 김서방 찾기 int to string : level 1 (0) | 2019.11.05 |
[프로그래머스] 같은 숫자는 싫어 level1 (0) | 2019.11.04 |
[프로그래머스] 두 정수 사이의 합 level 1 (0) | 2019.11.04 |