Sena's garden

[백준/C언어] 1978번: 소수 찾기 본문

백준/C언어

[백준/C언어] 1978번: 소수 찾기

paraam02 2024. 8. 25. 21:13

 

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

입력: 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력: 주어진 수들 중 소수의 개수를 출력한다.

https://www.acmicpc.net/problem/1978

 

 


 

 

코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

	int n;
	int input, count = 0;

	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		scanf("%d", &input);

		for (int j = 2; j <= input; j++) {
			if (j == input) 
				count++;

			if (input % j == 0)
				break;
		}
	}

	printf("%d", count);

	return 0;
}

 

 

 


 

 

이 문제는 이중 for문을 이용해 간단하게 해결할 수 있다. 우선 scanf를 이용해 입력받을 숫자의 갯수를 n에 저장한다. 첫 번째 for문은 n번 반복되게 한다. for문 안에 다시 한 번 scanf를 이용하여 숫자를 하나 입력받는다. 입력받은 숫자는 두 번째 for문을 이용하여 소수인지 아닌지 판별한다. 두 번째 for문의 조건에서 j의 시작을 2로 설정하여 입력받은 수가 1을 제외한 약수를 가지는 지 판별할 수 있도록 한다. 첫 번재 if문의 조건에서 j == input으로 j가 입력받은 수와 같다면 소수의 개수를 나타내는 count의 수를 1 증가시킨다. 그리고 두 번째 if문의 조건을 이용하여 j가 input의 약수라면 두 번재 for문을 종료시킨다. 이 때 만약 두 번째 if문이 첫 번째 if문 보다 먼저 나온다면 j == input인 경우 count가 증가되지 않고 반복문이 끝나게 되므로 둘의 순서가 바뀌어서는 안 된다. 마지막으로 이중 for문에서 빠져나온 이후 최종 count를 출력하여 문제를 해결할 수 있다.