문제 풀기/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;
}
}