알고리즘/C#

[C#] 정수 내림차순으로 배치하기 - 프로그래머스

야아옹 2020. 10. 17. 14:59

문제 : 함수 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;
    }
}