발자취
[백준 / C언어] Day35. 소수 찾기 (1978) 본문
2024. 07. 08 - 코딩테스트 스터디 Day35
01. 문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
02. 입력
첫 줄에 수의 개수 N이 주어진다. N은 100 이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
03. 출력
주어진 수들 중 소수의 개수를 출력한다.
04-1. 예제 입력 1
4
1 3 5 7
04-2. 예제 출력 1
3
05-1. 풀이 및 답
소수는 1과 자기 자신 외의 수로는 나누어 떨어지지 않는 1보다 큰 정수이다.
#include <stdio.h>
int main() {
int n, num, count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &num);
int is_prime = 1;
if (num == 1) {
is_prime = 0;
}
else {
for (int j = 2; j <= num / 2; j++) {
if (num % j == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
count++;
}
}
}
printf("%d", count);
return 0;
}
is_prime은 소수 여부를 나타내는 변수이며, 디폴트 값은 1이고 만약 소수가 아니라면 0 값을 가지게 된다.
만약 입력받은 숫자 num이 1이라면 is_prime을 0으로 바꿔준다 (1은 소수가 아니기 때문)
num이 1이 아니라면 num을 2부터 num / 2까지의 수로 나누어본다. 이 과정에서 num을 0으로 나누어 떨어지게 하는 수가 있다면 is_prime을 0으로 설정하고 반복문을 빠져나간다.
반복문을 빠져나간 이후 is_prime이 1이면 count의 값을 1 증가시킨다.
위의 과정을 n번 반복한 뒤, count를 출력한다.

정답!

끝~
'코딩테스트 > Daily Coding (C, C++)' 카테고리의 다른 글
| [프로그래머스 Lv.1 / C++] Day37. 제일 작은 수 제거하기 (0) | 2024.07.10 |
|---|---|
| [프로그래머스 Lv.1 / C++] Day36. 나누어 떨어지는 숫자 배열 (0) | 2024.07.09 |
| [백준 / C언어] Day34. 최대공약수와 최소공배수 (2609) (0) | 2024.07.07 |
| [백준 / C언어] Day33. 약수의 합 (17425) (0) | 2024.07.06 |
| [백준 / C언어] Day32. 약수의 합 2 (17427) (0) | 2024.07.05 |