코딩테스트 준비를 위한 알고리즘 문제 해결 능력을 강화해보세요.
문제 설명
주어진 정수 N이 있을 때, N을 구성하는 각각의 자릿수를 내림차순으로 정렬하여 새로운 정수로 반환하는 함수를 작성하십시오.
입력 조건
- 0 이상 10억 이하의 정수 N이 주어집니다.
출력 조건
- 정수 N의 각 자릿수를 내림차순으로 정렬한 정수를 반환합니다.
예제
입력 예시
N = 118372
출력 예시
873211
문제 접근 방법
이 문제를 해결하기 위해서는 다음과 같은 절차가 필요합니다.
- 정수 N을 문자열로 변환합니다.
- 각 자릿수를 리스트에 저장합니다.
- 리스트를 내림차순으로 정렬합니다.
- 정렬된 리스트의 요소들을 다시 문자열로 결합한 후, 정수로 변환합니다.
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#의 기본적인 배열 조작과 문자열 변환을 통해 이 문제를 효과적으로 해결할 수 있었습니다. 기초적인 알고리즘 문제이지만, 다양한 응용 문제로 발전될 수 있는 만큼 연습을 통해 더 많은 문제를 풀어보는 것이 중요합니다.