백준 1978번 C언어

Boomerang·2021년 8월 7일
0

알고리즘

목록 보기
3/10
post-thumbnail
post-custom-banner
  1. 문제를 읽고나서 소수를 어떻게 하면 간편하게 채크할 수 있을까 생각했다.
  2. 매번 소수인지 아닌지 채크를 한다고하면 시간이 오래걸릴 것 같아, 1000까지 숫자까지 소수를 채크하는거니까 한번에 1000자리 숫자를 다 채크하고, 그것을 배열에 넣으면 더 빠르게 채크 할 수 있다고 생각했다.
  3. 그래서 for문을 통해서 일단 2라는 숫자일때 array배열안의 값을 1로 바꾸는 코드를 만들었다.
  4. 그리고 count를 늘려가면서 한번이라도 나온 숫자는 모두 다 1로 바꾸었다.
  5. count를 늘려갈때, 즉 한번이라도 나온 숫자일때마다 또 다른 배열 array2에 넣어줬다.
  6. 숫자를 입력받았을때 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);

}

다른 사람들의 코드를 보니까 굳이 배열에 넣지 않고 한번에 나머지연산자(%)를 사용해서 그 숫자크기만큼 까지 비교를 하는 방식을 썼다. 더욱 더 효율적인 방법일 것이다

참고

profile
Hello World
post-custom-banner

0개의 댓글