백준 1929 C언어 - 시간초과, 실패

Boomerang·2021년 8월 8일
0

알고리즘

목록 보기
6/10
post-thumbnail

10시 41분 ~ 11시 05분 (24분, 시간초과)

  1. 직전에 풀었던 소수 찾는 문제랑 비슷하게 풀면 될 것이라 생각했다.
  2. 다시 다 지우고 차근차근 풀어봐야겠다고 생각하고, 어떤 수 X 가 입력되면 그 수의 소수가 있는지 없는지 표출해주는 함수를 만든후, for문을 사용해서 M과 N사이 값을 넣어 풀어야겠다.
  3. 시간 초과가 나서 중간에 해결 할 수 있는것이 있을지 고민해 봤다.
  4. 꼼수써서 2,3,5,7 같은 숫자가 반복되니까, 그것을 만족하면 표출하는 형식을 생각했는데, 이또한 시간초과이다.
#include <stdio.h>

int calculate(int n) {
	int i, bool_check = 0;
	for (i = 2; i <= n; i++) {
		if (n % i == 0 && n != i) {
			
			bool_check = 1;
			break;
		}
	}
	if (bool_check == 0) return -1;
	return i;
}
int main(void) {
	//int X, temp_index;
	//scanf("%d", &X);

	int M, N, temp_index;
	scanf("%d %d", &M, &N);

	// 2. 번까지 한 코드
	/*
	while(1){

		temp_index = calculate(X);

		if (temp_index != -1) {
			printf("%d\n", X);
		}

		X /= temp_index;

		if (X == 1)
			break;

	}*/

	for (int X = M; X < N; X++) {

		//while (1) {
		if (X % 2 == 0 || X % 3 == 0 || X % 5 == 0 || X % 7 == 0) {
			//if(X / )
			//printf("%d\n", X);
			if (X == 2 || X == 3 || X == 5 || X == 7)
				printf("%d\n", X);
			continue;
		}
		else
			temp_index = calculate(X);

		if (temp_index == -1) //{
			printf("%d\n", X);
				//break;
		//}

			//X /= temp_index;

			//if (X == 1)
			//	break;
		//}
		
	}

}

해결방법 :

  1. calculate연산에서 왔다갔다 하는 것 보다 나은 방법이 있을것이고
  2. calculate연산 자체를 고치는 방법도 있을 것이다.
  3. || 연산이나 && 연산을 줄이는 방식도 있을 것이다.
profile
Hello World

0개의 댓글