diff --git a/code_study/Baekjoon/c/1644.c b/code_study/Baekjoon/c/1644.c new file mode 100644 index 0000000..8982fa5 --- /dev/null +++ b/code_study/Baekjoon/c/1644.c @@ -0,0 +1,45 @@ +#include +#include +#include + +int main() { + int N; + scanf("%d",&N); + + bool* isPrime = (bool*)malloc(sizeof(bool)*(N+1)); + + for(int i=0; i<=N; i++) isPrime[i] = (i==0 || i==1) ? false : true; + + for(int i=2; i*i<=N; i++) { + if(isPrime[i]) { + for(int j=i*i; j<=N; j+=i) { + isPrime[j] = false; + } + } + } + + int prime_count = 0; + for(int i=0; i<=N; i++) if(isPrime[i]) prime_count++; + int* primes = (int*)malloc(sizeof(int)*(prime_count)); + int idx=0; + for(int i=2; i<=N; i++) if(isPrime[i]) primes[idx++] = i; + + int start = 0, end = 0; + int current_sum = 0; + int result = 0; + + while(start < prime_count) { + while(end < prime_count && current_sum < N) current_sum += primes[end++]; + + if(current_sum == N) result++; + + current_sum -= primes[start++]; + } + + printf("%d\n",result); + + free(isPrime); + free(primes); + + return 0; +} \ No newline at end of file