발자취

[백준 / C언어] Day35. 소수 찾기 (1978) 본문

코딩테스트/Daily Coding (C, C++)

[백준 / C언어] Day35. 소수 찾기 (1978)

해린 2024. 7. 8. 01:44

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를 출력한다.

 

 

정답!

 


끝~