C# 코딩테스트 강좌, 내림차순으로 자릿수 정렬하기

코딩테스트 준비를 위한 알고리즘 문제 해결 능력을 강화해보세요.

문제 설명

주어진 정수 N이 있을 때, N을 구성하는 각각의 자릿수를 내림차순으로 정렬하여 새로운 정수로 반환하는 함수를 작성하십시오.

입력 조건

  • 0 이상 10억 이하의 정수 N이 주어집니다.

출력 조건

  • 정수 N의 각 자릿수를 내림차순으로 정렬한 정수를 반환합니다.

예제

입력 예시

N = 118372

출력 예시

873211

문제 접근 방법

이 문제를 해결하기 위해서는 다음과 같은 절차가 필요합니다.

  1. 정수 N을 문자열로 변환합니다.
  2. 각 자릿수를 리스트에 저장합니다.
  3. 리스트를 내림차순으로 정렬합니다.
  4. 정렬된 리스트의 요소들을 다시 문자열로 결합한 후, 정수로 변환합니다.

C# 코드 구현

아래는 주어진 문제를 해결하기 위한 C# 코드입니다.

            
                using System;
                using System.Linq;

                public class Program
                {
                    public static void Main(string[] args)
                    {
                        int N = 118372;
                        Console.WriteLine(SortDigitsDescending(N));
                    }

                    public static int SortDigitsDescending(int n)
                    {
                        // 정수를 문자열로 변환
                        var digits = n.ToString().ToCharArray();

                        // 문자열을 내림차순으로 정렬
                        Array.Sort(digits);
                        Array.Reverse(digits);

                        // 정렬된 문자열을 다시 정수로 변환
                        return int.Parse(new string(digits));
                    }
                }
            
        

코드 설명

위 코드에서 사용된 각 단계에 대해 설명하겠습니다.

1. 정수를 문자열로 변환

n.ToString().ToCharArray()를 사용하여 정수를 문자열로 변환합니다. 이후 ToCharArray() 메소드를 통해 각 자릿수를 문자 배열로 변환합니다.

2. 자릿수 정렬

Array.Sort(digits)를 호출하여 자릿수를 오름차순으로 정렬합니다. 이후 Array.Reverse(digits)를 호출하여 내림차순으로 변경합니다.

3. 정수로 변환

최종적으로 new string(digits)를 통해 문자 배열을 문자열로 변환한 다음, int.Parse를 사용하여 정수로 변환합니다.

시간 복잡도

이 알고리즘의 시간 복잡도는 O(d log d)입니다. 여기서 d는 입력된 정수의 자릿수입니다. 자릿수를 정렬하는 데 걸리는 시간은 O(d log d)이고, 그 외의 연산들은 O(d)입니다.

결론

본 강좌에서는 주어진 정수를 내림차순으로 정렬하는 방법에 대해 알아보았습니다. C#의 기본적인 배열 조작과 문자열 변환을 통해 이 문제를 효과적으로 해결할 수 있었습니다. 기초적인 알고리즘 문제이지만, 다양한 응용 문제로 발전될 수 있는 만큼 연습을 통해 더 많은 문제를 풀어보는 것이 중요합니다.

© 2023 C# 코딩테스트 강좌. 모든 권리 보유.