문제 풀기/C#

34. 문자열 내림차순으로 배치하기(문자열.ToCharArray(), Array.Sort(), Array.Reverse())

kagan-draca 2025. 1. 20. 14:28

 

기본틀 :

public class Solution {
    public string solution(string s) {
        string answer = "";
        return answer;
    }
}

 

풀이 1)

 

매개변수 string 타입인 s를 Select로 요소를 char에서 int 형으로 변경한다.

 

그 후, OrderByDescending으로 내림 차순 정렬 이후 다시 int 형을 char형으로 변경시켜준다.

 

마지막으로, ToArray()로 문자 배열을 만들어준 후, string.Join("",)으로 문자열로 만들어 반환해준다.

 

using System.Linq;

public class Solution {
    public string solution(string s)
    {
        return string.Join("",s.Select((element)=> (int)element).OrderByDescending((element)=> element).Select((element)=> (char)element).ToArray());    
    }
}

 

풀이 2)

 

s.OrderByDescending(element => element)로 문자열의 요소인 문자를 내림차순 정렬시켜주고,

string.Concat으로 문자를 문자열로 붙여준다.

 

using System.Linq;

public class Solution {
    public string solution(string s) {
        return string.Concat(s.OrderByDescending(element => element));
    }
}

 

 

풀이 3) 

 

위의 문제를 다양한 방식으로 풀 수 있을 것이라는 생각이 들었지만 다른 방법이 떠오르지 않았다

(거의 대부분 유사한 방식일 것이라 함수의 차이 정도만 존재할 것이라 생각했다)

 

그래서, 다른 사람들의 풀이를 본 결과

 

using System;

public class Solution {
    public string solution(string s) {
        char[] a = s.ToCharArray();
        Array.Sort(a);
        Array.Reverse(a);
        return new string(a);
    }
}

 

s.ToCharArray()라고

 

string 타입을 char[] 형 배열로 만들어주는 함수가 존재했다.

 

또한, Array.Sort()는 작은 값에서 큰 값으로 오름차순 정렬을 해주는 함수가 존재했고

 

Array.Reverse()로 오름차순된 배열을 내림차순으로 바꾸는 방법이 존재했다.

 

마지막으로 내림차순된 char형 배열을 new string()으로 감싸준 후 반환해줬다.

 

실험 ) 문자열을 문자로 바꾸는 방법들의 수행시간 비교해보기

 

실험 1) new string()

 

 

실험 2) string.Concat()

 

 

실험 3) string.Join()

 

 

위의 return 문의 내용을 new string(), string.Concat(), string.Join()으로 바꿔서 

각각의 수행시간을 비교해봤다.

 

수행 시간이 짧은 순으로는

1등 : new string()
공동 2등 : string.Concat(), string.Join("", )

 

으로 new string()이 가장 짧은 수행시간을 보여줬다.

(의외의 결과라 더 놀람...)

 

string.Concat()와 string.Join()을 수행하기 위해서는

각각의 input 값을 순회하는 반복문이 작동하는 것으로 추측된다.