문제 : 사용자로부터 배열을 입력받아 내림차순으로 정렬하는 함수를 작성하시오

 

내가 쓴 풀이 : 이중 for문을 이용하여 직접 하나씩 하니씩 비교해가며 정렬 하는 방식으로 작성하였다.

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.Write("배열의 숫자를 공백으로 구분하여 입력하세요: ");
        string input = Console.ReadLine(); // 사용자 입력 받기
        string[] strArr = input.Split(' '); // 공백 기준으로 나누기
        int[] intArr = Array.ConvertAll(strArr, int.Parse); // 문자열 배열을 정수 배열로 변환

        // 정렬 (버블 정렬 방식)
        for (int i = 0; i < intArr.Length - 1; i++)
        {
            for (int j = 0; j < intArr.Length - 1 - i; j++)
            {
                if (intArr[j] < intArr[j + 1]) // 내림차순 정렬
                {
                    int temp = intArr[j];
                    intArr[j] = intArr[j + 1];
                    intArr[j + 1] = temp;
                }
            }
        }

        Console.Write("정렬된 배열: ");
        foreach (int num in intArr)
        {
            Console.Write(num + " ");
        }
    }
}

 

 


 

다른 방법 : 기능함수인 Array.Sort()를 사용하여 배열을 먼저 오름차순으로 정렬을 해주고 Array.Reverse()를 이용하여 오름차순으로 정렬된 배열을 뒤집어 내림차순으로 변경해준다

class Program
{
    static void Main(string[] args)
    {
        Console.Write("배열의 숫자를 공백으로 구분하여 입력하세요: ");
        string input = Console.ReadLine();
        int[] intArr = Array.ConvertAll(input.Split(' '), int.Parse);

        Array.Sort(intArr); // 배열 정렬 (오름차순)
        Array.Reverse(intArr);

        Console.WriteLine("정렬된 배열: " + string.Join(" ", intArr));
    }
}

 

 

내가 쓴 풀이와 다른 풀이를 비교 : 내가 풀이는 이중 for을 사용하여 버블 정렬로 배열을 정리하고 다른 풀이는 제공 메서드를 이용하여 퀵 정렬로 배열을 정리한다. 그래서 속도 성능을 생각했을때 내가 쓴 풀이는 이중 for문으로 인해 불필요한 계산이 발생해 속도가 느려지고 다른풀이는 C# 기본 제공 메서드를 사용하여 내부적으로 빠르게 연산하여 속도가 빠르다.

그래서 배열이 크고 빠른 연산이 필요할때는 다른 풀이 처럼 Array.Sort() 메서드를 사용하고 정렬 알고리즘을 직접 구현해야 하거나 커스텀이 필요할 경우 이중 for문을 이용한 버블 정렬이 용이하다고 한다.

 

+ Recent posts