Notice
Recent Posts
Recent Comments
Link
Sena's garden
[백준/C언어] 1978번: 소수 찾기 본문
문제
주어진 수 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를 출력하여 문제를 해결할 수 있다.
'백준 > C언어' 카테고리의 다른 글
| [백준/C언어] 1085번: 직사각형에서 탈출 (0) | 2024.08.27 |
|---|---|
| [백준/C언어] 11653번: 소인수분해 (0) | 2024.08.26 |
| [백준/C언어] 9506번: 약수들의 합 (0) | 2024.08.24 |
| [백준/C언어] 2501번: 약수 구하기 (0) | 2024.08.23 |
| [백준/C언어] 5086번: 배수와 약수 (0) | 2024.08.22 |