- 문제를 읽고나서 소수를 어떻게 하면 간편하게 채크할 수 있을까 생각했다.
- 매번 소수인지 아닌지 채크를 한다고하면 시간이 오래걸릴 것 같아, 1000까지 숫자까지 소수를 채크하는거니까 한번에 1000자리 숫자를 다 채크하고, 그것을 배열에 넣으면 더 빠르게 채크 할 수 있다고 생각했다.
- 그래서 for문을 통해서 일단 2라는 숫자일때 array배열안의 값을 1로 바꾸는 코드를 만들었다.
- 그리고 count를 늘려가면서 한번이라도 나온 숫자는 모두 다 1로 바꾸었다.
- count를 늘려갈때, 즉 한번이라도 나온 숫자일때마다 또 다른 배열 array2에 넣어줬다.
- 숫자를 입력받았을때 array2에 있는 숫자면 소수라 k를 늘려준다(카운트).
#include <stdio.h>
int main(void) {
int n, array[1001] = { 0, }, array2[500], c = 0, check_val, k = 0;
scanf("%d", &n);
array2[c++] = 0;
for (int count = 2; count < 1000; count++) {
if (array[count - 1] == 0)
array2[c++] = count;
// printf("%d ", count);
for (int i = 0; i < 1000; i++) {
if ((i + 1) % count == 0) {
array[i] = 1;
}
}
}
for (int j = 0; j < n; j++) {
scanf("%d", &check_val);
for (int i = 0; i < c; i++) {
if (array2[i] == check_val) {
k++;
}
}
}
printf("%d", k);
}
다른 사람들의 코드를 보니까 굳이 배열에 넣지 않고 한번에 나머지연산자(%)를 사용해서 그 숫자크기만큼 까지 비교를 하는 방식을 썼다. 더욱 더 효율적인 방법일 것이다