반응형
LinkedIn
개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github
WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish
내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.
Recent Posts
Recent Comments
- Total
꿈꾸는리버리
[백준 알고리즘 4948] 베르트랑 공준 본문
반응형
https://www.acmicpc.net/problem/4948
풀이방법 : 해당 수의 제곱근까지만 나누어보는 것 && 에라토스테네스의 체 (백준 1929 소수구하기 문제와 동일)
에라토스테네스의 체를 사용해야 하는 이유는 시간초과 때문이다. 소수를 판별하기 위해서 이전의 수를 모두 나누어보는 것은 시간복잡도가 엄청나게 커지는 방법이기 때문이다.
해당 수의 제곱근까지만 나누어보는 것:
쉽게 생각해보자. 예를 들어 18의 소수를 구하려고 한다. 1,2,3,4,5,6,7,8,...,18 -> 루트 18은 대략 4. xx이다.
만약 4(루트 18) 보다 큰 소인수가 있다면 이미 그 짝은 4보다 작은 수일 것이다. ex) (4보다 큰 소인수 == 6 )-> (6의 짝 == 3)
그러니 이미 순차적으로 i를 증가시키는 동안 이미 4보다 작은 수로(3으로) 나누어보았을 것이다.
에라토스테네스의 체:
이름부터 어려운 에라토스테네스...의 체... 원리는 easy하다. 이전에 든 예 18로 계속 진행을 해보겠다.
1,2,3,4,5,6,7,8,...,18 에서 일단 소수가 될 수 없는 1을 빼고, 다음 수인 2가 소수인지 판별한다.
2가 소수네 ? --> 2를 제외한 2의 배수 다 삭제 : 2,3,5,7,9,11,13,15,17
2 다음 수인 3이 소수인지 판별한다.
3이 소수네 ? --> 3을 제외한 3의 배수 다 삭제 : 2,5,7,11,13,17
~~ 해서 18일 때까지 반복을 하면 된다.
작성한 코드는 다음과 같다.
#include <iostream>
#include <math.h>
using namespace std;
void Count(int N){
if(N == 0 ) return;
int array[N];
int count = 0;
for( int i = 0 ; i < N+1; i++){
array[i] = i;
}
array[1] = 0;
for(int i = 2 ; i < sqrt(N+1); i++){
if(array[i] >= 1){
for(int k = i*i ; k < N+1; k = k+i){
array[k] = 0;
}
}
}
for(int i = N/2+1 ; i < N+1; i++){
if(array[i] >= 1){
count ++;
}
}
cout << count << "\n";
return;
}
int main() {
int N;
while(1){
cin >> N;
Count(2*N);
if( N == 0 ) break;
}
return 0;
}
성공한 사진 !
반응형
'오뚝이 개발자 > 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 3009 네 번째 점 (0) | 2021.12.01 |
---|---|
[백준 알고리즘] 1085 직사각형에서 탈출 (0) | 2021.12.01 |
[백준 알고리즘] 9020 골드바흐의 추측 C++ (0) | 2021.12.01 |
[백준 알고리즘 11653] 소인수분해 (0) | 2021.11.30 |
[백준 알고리즘] 1929 소수구하기 C++ (0) | 2021.11.30 |
Comments