문제 : 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴
제한조건 :
- n은 1이상 8000000000 이하인 자연수입니다.
풀이 1 : Array.sort 를 사용하되 IComparer 사용하여 풀기!
이전 문제에서 Array sort 를 사용할때 파리미터중 Icomparer 를 사용하는 방법이 생각나서 풀어보았다!
내림차순 이므로 Icomparer를 상속받은 Mycompare 에 구현된 Compare 은 반대로!
public static long solution(long n)
{
long answer = 0;
string[] strArray = n.ToString().Select(x => x.ToString()).ToArray();
Array.Sort(strArray, new MyCompare());
answer = Int32.Parse(string.Join("", strArray));
return answer;
}
public class MyCompare : IComparer<string>
{
public MyCompare()
{
}
public int Compare(string x, string y)
{
return y.CompareTo(x);
}
}
풀이 2 : 간단하게! linq!
public static long solution(long n)
{
long answer = 0;
string[] strArray2 = n.ToString().Select(x => x.ToString()).OrderBy(y => y).Reverse().ToArray();
answer = Int32.Parse(string.Join("", strArray2));
return answer;
}
풀이 3 : 근본! 이게 제일 빠르다...
using System;
public class Solution {
public long solution(long n) {
string str = n.ToString();
char[] arr = str.ToCharArray();
for(int i = 0; i < arr.Length; i++){
for(int j = i + 1; j< arr.Length; j++){
if(arr[i] < arr[j]){
char k = arr[i];
arr[i] = arr[j];
arr[j] = k;
}
}
}
string s = new string(arr);
long answer = Int64.Parse(s);
return answer;
}
}
'알고리즘 > C#' 카테고리의 다른 글
[C#] 제일 작은 수 제거하기 - 프로그래머스 (0) | 2020.10.18 |
---|---|
[C#] 정수 제곱근 판별 - 프로그래머스 (0) | 2020.10.18 |
[C#] 자연수 뒤집어 배열로 만들기 - 프로그래머스 (0) | 2020.10.17 |
[C#] 자릿수 더하기 - 프로그래머스 (0) | 2020.10.17 |
[C#] 이상한 문자 만들기 - 프로그래머스 (0) | 2020.10.16 |