Algorithm/BOJ

[BOJ] 2581번 소수 C# 사용 풀이

Bueong_E 2023. 2. 6. 23:08
반응형
SMALL

초반에 예외 처리를 잘못하여 다시 작성하였다;;;

문제

처음 틀린 풀이

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace BOJ2581
{
    internal class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int M = int.Parse(sr.ReadLine());
            int N = int.Parse(sr.ReadLine());
            int sum = 0;

            List<int> numList = new List<int>();

            for (int i = M; i <= N; i++)
            {
                if (i == 2 || i == 3 || i == 5 || i == 7)
                {
                    sum += i;
                    numList.Add(i);
                }
                else if (i != 0 && i != 1 && i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0)
                {
                    sum += i;
                    numList.Add(i);
                }
            }

            if (numList.Count > 0)
            {
                sw.WriteLine(sum);
                sw.WriteLine(numList.Min());
            }
            else sw.WriteLine(-1);

            //foreach(int i in numList) { sw.WriteLine(i); }
            //sw.WriteLine(numList.Count());

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

이후 브루트 포스로 해결한 풀이

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace BOJ2581
{
    internal class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int M = int.Parse(sr.ReadLine());
            int N = int.Parse(sr.ReadLine());
            int sum = 0;
            int temp = 0;

            List<int> numList = new List<int>();
            List<int> primenum = new List<int>();

            for (int i = M; i <= N; i++) numList.Add(i);

            for (int i = 0; i < numList.Count; i++)
            {
                if (numList[i] == 0 || numList[i] == 1) continue;
                else if (numList[i] == 2)
                {
                    sum += numList[i];
                    primenum.Add(numList[i]);
                }
                else
                {
                    for (int j = 2; j < numList[i]; j++)
                    {
                        if (numList[i] % j == 0)
                        {
                            temp = 0;
                            break;
                        }
                        else temp = numList[i] % j;
                    }
                    if (temp != 0)
                    {
                        sum += numList[i];
                        primenum.Add(numList[i]);
                        temp = 0;
                    }
                }
            }
            if (primenum.Count > 0)
            {
                sw.WriteLine(sum);
                sw.WriteLine(primenum.Min());
            }
            else sw.WriteLine(-1);

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

 

결과창

소수가 없을경우

 

반응형
LIST