WalkerJei's Lifelog

백준알고리즘 1978번 소수 찾기 C# 본문

소프트웨어 개발/코딩테스트(기성 문제)

백준알고리즘 1978번 소수 찾기 C#

WalkerJei 2025. 5. 7. 18:56

세부 정보

  • 사이트: 백준알고리즘
  • 번호: 1978
  • 문제명: 소수 찾기
  • 언어: C#
  • 분류: 수학, 정수론, 소수 판정
  • 비고:

 

문제

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

 

입력

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

 

출력

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

 

풀이

A와 B가 있을 때 A의 소수 여부 확인을 할 때는 B에 2를 넣고 A와 B를 나눈 나머지를 구해 0이 나오는 지 확인한다. 0이 안 나오면 B에 1씩 더해서 다시 나눗셈을 해 나머지를 구한다. B가 A와 같아지기 전에 A와 B를 나눈 나머지가 0이 나오면 소수가 아니다.

class PrimeNumber
{
    static void Main(String[] args)
    {
        StreamReader sr = new StreamReader(Console.OpenStandardInput());
        StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
        
        // 입력할 수의 개수 입력
        int n = Convert.ToInt32(sr.ReadLine());
        int[] input = new int[n];
        
        // 소수의 개수를 저장할 변수
        int count = 0;

        // 소수 입력
        input = sr.ReadLine().Split().Select(int.Parse).ToArray();

        for(int i = 0; i < input.Length; i++)
        {
            // 소수 여부를 판단하는 변수
            bool isPrime = true;
            // 1 이하의 수는 소수가 아니다.
            if (input[i] <= 1) continue;
            
            for(int j = 2; j < input[i]; j++)
            {
                // 해당하는 수에 2부터 해당하는 수까지 나눈다.
                if (input[i] % j == 0)
                {
                    // 나머지가 0인 경우 소수가 아님을 확인하고 나간다
                    isPrime = false;
                    break;
                }
            }
            // 반복문 연산 이후 isPrime의 상태가 true여야 1을 더한다.
            if(isPrime) count++;
            
        }
        // 소수의 개수 출력
        sw.WriteLine(count);

        sr.Close();
        sw.Close();
    }
}

 

후기

잊고 지냈던 수학 기억을 하나둘씩 복원하는 느낌을 받았다. 이런 것도 모르면 안 되겠다 싶어서 총괄적으로 복습을 할 방법을 찾아보고 있다. 성장에 한계가 찾아오면 안 되고, 반면에 한계가 오더라도 이를 뛰어넘을 방법을 찾아야 한다. 하루빨리 전공을 살리는 일을 해서 세금도 내야 하는데 그런 날이 언제 올 지 기다릴 뿐이었다.