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

8772 단어 C백준C

생각의 흐름

n개를 입력받는다. 4개로 가정하면, 그 4개를 저장해야하는 공간이 필요하다. 배열을 만들어야겠구나.
이제 소수를 구해야한다. 1은 소수가 아니므로 예외처리를 해줘야겠다고 생각했다.
2부터 시작하는데, 구하는 방법은 간단하다. 예를 들어 15의 소수를 판별하자고 생각해보자.

  • i = 2부터 15가 되기 전까지 증가시킨다. 단, 15 % i == 0이면 소수가 아니기에 break를 걸어준다. 3에서 break가 된다.
  • 그러면 이번엔 19가 소수인지 판별해보자.
  • i는 계속 증가해서 19까지 도달할 것이다. 그러면 count++로 소수의 개수를 하나 증가시켜주고, 다음 배열(다음 차례)로 이동해서 같은 논리로 진행한다.

내가 푼 코드

#include <stdio.h>

int main()
{
    int n, i, j;
    int arr[100];
    int count = 0;
    scanf("%d", &n);
    i = 0;
    while (i < n)
    {
        scanf("%d", &arr[i]);
        i++;
    }
    i = 0;
    while (i < n)
    {
        if (arr[i] >= 2)
        {
            j = 2;
            while (j <= arr[i])
            {
                if (j == arr[i])
                    count++;
                if (arr[i] % j == 0)
                    break;
                j++;
            }
            i++;
        }
        else
            i++;
    }
    printf("%d", count);
}

다른 사람 풀이

#include <stdio.h>
 
int main(void)
{
    int n;
    int num, count = 0;
 
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &num);
        for (int j = 2; j <= num; j++)
        {
            if(num == j)
                count++;
            if (num % j == 0)
                break;
        }
    }
 
    printf("%d", count);
 
    return 0;
}

출처: https://kiffblog.tistory.com/58

같은 방법이다. 배열로 안받고 그냥 바로 차례대로 처리해주어 조금 더 간결하다.

좋은 웹페이지 즐겨찾기