코딩테스트

2581번 소수, 11653번 소인수분해, 3009번 네 번째 점, 15894번 수학은 체육과목입니다.

Cadi 2025. 1. 23. 17:29

코딩테스트 : 2581번 소수

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

public class Program
{
    public static void Main()
    {
        int a = int.Parse(Console.ReadLine());
        int b = int.Parse(Console.ReadLine());
        int[] arr = new int[b-a+1];
        int c = 0;



        for (int i = a; i <= b; i++)
        {
            for (int j = 2; j <= i; j++)
            {
                if (j == i )
                {
                    arr[c] = j;
                    c++;
               
                }
                if (i % j == 0)
                {
                    break;
                }
            }
        }

        if (arr[0] != 0)
        {
            Console.WriteLine(arr.Sum());
            Console.WriteLine(arr[0]);
        }
        else
        {
            Console.WriteLine(-1);
        }
      

    }
}

다른 사람의 흥미로운 풀이

저번에도 봤던, 소수를 구할 때 j의 절반까지만 구하는 방식이 상당히 인상깊었다. 

 

 

코딩테스트 : 11653번 소인수분해

문제

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

public class Program
{
    public static void Main()
    {
        int number = int.Parse(Console.ReadLine());
        
        int[] numbers = new int[number];

        int c = 0;

        for (int i = 2; i <= number; i++)
        {
            if (number % i == 0)
            {
                numbers[c] = i;
                number = number / i;
                c++;
                i--;
            }
        }

        for (int i = 0; i < c; i++)
        {
            Console.WriteLine(numbers[i]);
        }
    }
}

다른 사람의 흥미로운 풀이

굳이 배열에 담을 필요도 없었다. 그냥 나눠지는대로 추가하면 되었다.

 

코딩테스트 : 3009번 네 번째 점

문제

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.

public class Program
{
    public static void Main()
    {
        List<int> x = new List<int>();
        List<int> y = new List<int>();
        for (int i = 0; i < 3; i++)
        {
            int[] s = Console.ReadLine().Split().Select(int.Parse).ToArray();
            if (x.Contains(s[0]))
            {
                x.Remove(s[0]);
            }
            else
            {
                x.Add(s[0]);
            }
            if (y.Contains(s[1]))
            {
                y.Remove(s[1]);
            }
            else
            {
                y.Add(s[1]);
            }
            
        }
        Console.WriteLine(x[0] + " " + y[0]);
        
        
    }
}

다른 사람의 흥미로운 풀이

다른 문제처럼 그냥 넘어가려 했는데 '비트 연산자'라는 내가 모르는 것을 사용하신 분이 계셨다. 

 

 

코딩테스트 : 15894번 수학은 체육과목입니다.

문제

성원이는 수학을 정말 못 하는 고등학생이다. 수학을 못하는 대신 근성과 팔 힘이 뛰어난 성원이는 수학 시험에서 수학 지식을 사용하지 않고 근성과 체력을 사용해 문제를 푼다. 지난 시험에서는 아래 사진에 나와있는 문제를 근성과 체력을 사용해 열심히 풀었지만 사진에서 볼 수 있듯이 틀려버리고 말았다!

결국 이 문제는 틀려버렸지만 성원이는 여전히 자신의 체력에 강한 자신감을 갖고 있다. 어떤 어려운 문제가 나와도 이런 식으로 근성과 체력을 사용하면 다 풀 수 있으니 이 방법은 최고의 방법이라고 생각하고 있다.

성원이의 친구 형석이는 근성과 체력으로 수학 문제를 푸는 것은 굉장히 무식한 방법이라고 생각한다. 형석이는 수학을 공부하면 문제를 훨씬 빨리 풀 수 있다는 것을 알려주기 위해 위 사진에 나와있는 문제를 갖고 성원이와 퀴즈 내기를 하기로 했다. 위 사진의 문제를 다시 정리하면 아래와 같다.

"한 변의 길이가 1인 정사각형을 아래 그림과 같이 겹치지 않게 빈틈없이 계속 붙여 나간다. 가장 아랫부분의 정사각형이 n개가 되었을 때, 실선으로 이루어진 도형의 둘레의 길이를 구하시오."

가장 아랫부분의 정사각형 개수가 주어지면 그에 해당하는 답을 출력하는 프로그램을 만들어 형석이를 도와주자!

입력

첫 번째 줄에 가장 아랫부분의 정사각형 개수 n이 주어진다. (1 ≤ n ≤ 109)

출력

첫 번째 줄에 형석이가 말해야 하는 답을 출력한다.

 

 

public class Program
{
    public static void Main()
    {
       long number = int.Parse(Console.ReadLine());
       
       Console.WriteLine(number*4);
        
    }
}

int로 했다가 틀렸다. 처음과 끝을 잘 보자.

 

 


오늘은 쉬운 것들만 풀게 되었다. 2월 전까지는 기초를 끝내 놔야 한 두 문제씩 한 시간에 한 문제씩 투자하며 풀 수 있을 것 같으니 일단 빨리 다 푸는 것을 목표로 !