백준 4948번 C언어

Boomerang·2021년 8월 10일
0

알고리즘

목록 보기
8/10
post-thumbnail
post-custom-banner

10:26 ~ 11:09 43분

  1. 직전에 풀었던 문제를 응용해서 범위를 사용하면 되는것이라고 생각했다 소수구하기
  2. 하지만 문제를 풀다 xcode -> vs로 옮기면서 생긴 문제들이 발목을 잡았고 이를 해결해 봤다.
  1. Visual Studio의 0xC00000FD: Stack overflow 오류
    Visual Studio는 Stack이 기본적으로 1MB라고 한다. 그래서 malloc함수를 사용해서 heap에 넣던가 아니면 아예 프로젝트 -> 링크 -> 스택 크기를 늘려주면 될 것이다.

참고

  1. 소수의 범위가 123456까지고, 실제로는 두배까지 구해야하니까 123456*2 까지일 것이다. 이것을 놓쳐서 큰 값을 넣었을때 원하는 값이 안나왔다. 이렇게 범위를 정해준 문제는 그 문제에서 구해야 하는 범위까지 생각해서, (주어진 범위 외에도) 풀면 좋을 것이다.
#include <stdio.h>
int main(void) {
	int n, n2, arr[1000001] = { 0, }, count = 0;
	arr[1] = 1;

	for (int i = 2; i <= 260000; i++) {
		for (int j = 2; i * j <= 260000; j++) { // 안쪽 loop은 i * j 로 최대 범위를 정해둬서 arr범위 내로 사용하게 함. 
       							//123456 * 2까지니까 대략 260000으로 함.
			arr[i * j] = 1;
		}
	}

	
	while (1) {
		scanf("%d", &n);

		if (n == 0) break;
		
		n2 = n * 2;

		for (int i = n+1; i <= 2 * n; i++) {	// n은 포함하지 않는다고 명시됨
			if (arr[i] == 0) {
				count++;
			}

		}

		printf("%d\n", count);
		count = 0;
		n = 0;
	}

	return 0;
}
profile
Hello World
post-custom-banner

0개의 댓글