코딩테스트

5086번 배수와 약수,2501번 약수 구하기, 1978번 소수 찾기 , 9056번 약수들의 합

Cadi 2025. 1. 22. 22:12

코딩테스트 : 5086 배수와 약수

문제

4 × 3 = 12이다.

이 식을 통해 다음과 같은 사실을 알 수 있다.

3은 12의 약수이고, 12는 3의 배수이다.

4도 12의 약수이고, 12는 4의 배수이다.

두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.

  1. 첫 번째 숫자가 두 번째 숫자의 약수이다.
  2. 첫 번째 숫자가 두 번째 숫자의 배수이다.
  3. 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.

입력

입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.

출력

각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.

public class Program
{
    public static void Main()
    {
        while (true)
        {
            string[] s = Console.ReadLine().Split();
            if (s[0] == "0" && s[1] == "0") break;
            else
            {
                int a = Int32.Parse(s[0]);
                int b = Int32.Parse(s[1]);

                if (b % a == 0)
                {
                    Console.WriteLine("factor");
                }
                else if (a % b == 0)
                {
                    Console.WriteLine("multiple");
                }
                else
                {
                    Console.WriteLine("neither");
                }
            }
        }
    }
}

 

 

 

코딩테스트 : 2501번 약수 구하기 

문제

어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다. 

6을 예로 들면

  • 6 ÷ 1 = 6 … 0
  • 6 ÷ 2 = 3 … 0
  • 6 ÷ 3 = 2 … 0
  • 6 ÷ 4 = 1 … 2
  • 6 ÷ 5 = 1 … 1
  • 6 ÷ 6 = 1 … 0

그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.

두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

출력

첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.

public class Program
{
    public static void Main()
    {
        string[] s = Console.ReadLine().Split();
        int a = int.Parse(s[0]);
        int b = int.Parse(s[1]);
        List<int> list = new List<int>();
        for (int i = 1; i <= a; i++)
        {
            if (a % i == 0)
            {
                list.Add(i);
            }
        }

        if (list.Count >= b)
        {
            Console.WriteLine(list[b - 1]);
        }
        else
        {
            Console.WriteLine(0);
        }
    }
}

 

중간에 부등호 확인 안해서 두 번 틀렸다 ㅎㅎ...

 

다른 사람의 흥미로운 풀이

배열을 일단 크게 선언해두고, 어쩌피 0이니까 배열을 그대로 출력하는 방법도 있다.

 

 

코딩테스트 : 1978번 소수 찾기 

문제

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

입력

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

출력

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

public class Program
{
    public static void Main()
    {
        int number = int.Parse(Console.ReadLine());
        int count = 0;

       int[] numbers =  Console.ReadLine().Split().Select(int.Parse).ToArray();

       for (int i = 0; i < numbers.Length; i++)
       {
           int currentNumber = numbers[i];
           if (numbers[i] == 1)
           {
               continue;
           }
           else if (numbers[i] == 2) count++;
           else
           {
               for (int j = 2; j < currentNumber; j++)
               {
                   if ( currentNumber % j == 0) break;
                   if ( j == currentNumber-1) count++;
               }
           }
           
       } 
       Console.WriteLine(count);
       
    }
}

중간에 2 예외처리를 해 주지 않아서 틀렸었다. 

 

 

 

코딩테스트 : 9056번 약수들의 합 

문제

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

입력

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)

입력의 마지막엔 -1이 주어진다.

출력

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

이때, 약수들은 오름차순으로 나열해야 한다.

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

public class Program
{
    public static void Main()
    {
        while (true)
        {
            int number = int.Parse(Console.ReadLine());
            if (number == -1) break;
            List<int> numbers = new List<int>();
            for (int i = 1; i < number; i++)
            {
                if (number % i == 0)
                {
                    numbers.Add(i);
                }
            }
            if (numbers.Sum() == number)
            {
                Console.Write(number + " = " + 1);
                for (int i = 1; i < numbers.Count; i++)
                {
                    Console.Write(" + " + numbers[i]);
                }
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine($"{number} is NOT perfect.");
            }

        }
       
    }
}

 

Not이라고 해서 틀렸었네......