문제 풀기/C#

103. 가장 큰 수 (Array.Sort, CompareTo)

kagan-draca 2025. 3. 31. 16:56

 

기본 틀 :

 

using System;

public class Solution {
    public string solution(int[] numbers) {
        string answer = "";
        return answer;
    }
}

 

문제를 보고 "OrderByDescending이나 Array.Sort를 활용하면 쉽게 해결할 수 있지 않나?" 라는 생각을 했다.

 

그리고 OrderByDescending은 아무리 생각해봐도 아닌 것 같고

 

Array.Sort를 잘 활용하면 좋다는 생각은 들었지만 어떻게 조건에 부합하게 비교할지 막막했다...

 

인터넷에 찾아보니 CompareTo()를 활용해서 

 

정수형 배열을 문자열 배열로 만든 요소 두 개를 

 

(b + a).CompareTo(a + b)로 비교하는 방법을 사용해 해결하는 것을 보았다.

 

(b + a)나 (a + b)로 두 요소를 연결 연산자를 활용해 붙여주고

 

CompareTo로 비교하면 

 

(b + a)가 (a + b)보다 클 경우 1, 작으면 -1, 같으면 0을 반환해줬다.

 

Array.Sort에서는 -1이면 앞으로 이동, 1이면 뒤로 이동, 0이면 이동 하지 않기라

 

이 방식으로 "내림차순 정렬"이 가능했다.

 

(

 

반대로, (a + b).CompareTo(b + a) 이면 오름차순 정렬의 결과가 나온다.

 

)

 

그 뒤부터는 쉬웠다.

 

string.Join으로 "" 공백 없이 문자열 배열을 문자열로 붙여줬다.

 

그리고, 테스트 케이스를 진행하면서 "00" 같이 모든 글자가 0인 경우가 존재해서

 

return result[0] == '0' ? "0" : result;

 

으로 하나의 0이 출력되도록 바꿔줬다.

 

using System;
using System.Linq;

public class Solution {    
    public string solution(int[] numbers) {
        
        // 정수 배열을 문자열 배열로 변환
        string[] stringNumbers = numbers.Select(element => element.ToString()).ToArray();
        
        // 정렬을 할 것인데
        // b + a로 두 요소를 연결한 문자열 숫자와
        // a + b로 두 요소를 연결한 문자열 숫자를
        // CompareTo로 비교 
        
        // b + a가 a + b 보다 크면 1, 작으면 -1, 같으면 0
        // => 내림 차순 정렬
        Array.Sort(stringNumbers, (a, b)=> (b + a).CompareTo(a + b));
        // add ) (a + b).CompareTo(b + a) => 오름 차순 정렬
        
        // 문자열 배열을 하나의 문자열로 붙이기
        string result = string.Join("", stringNumbers);
        
        // "00" 같은 문자열 배열이면 "0"으로 변경
        return result[0] == '0' ? "0" : result;
    }
}

'문제 풀기 > C#' 카테고리의 다른 글

106. 택배상자  (0) 2025.04.03
104. 소수 찾기(재귀 함수를 이용한 소수 만들기)  (0) 2025.04.01
102. 다리를 지나는 트럭  (0) 2025.03.31
101. 2개 이하로 다른 비교  (0) 2025.03.25
100. 숫자 변환하기  (0) 2025.03.21