기본 틀 :
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 |