반응형
풀이 코드
using System;
public class Solution {
public string solution(int[] numbers) {
string answer = GetAnswer(numbers);
return answer;
}
private string GetAnswer(int[] numbers)
{
Array.Sort(numbers, (a, b) =>
{
string combineAB = string.Format("{0}{1}", a, b);
string combineBA = string.Format("{0}{1}", b, a);
return combineBA.CompareTo(combineAB);
});
return (GetZeroCount(numbers) == numbers.Length) ?
"0" : string.Join("", numbers);
}
private int GetZeroCount(int[] sortedNumbers)
{
int returnVal = 0;
for(int i = 0; i < sortedNumbers.Length; i++)
{
if(sortedNumbers[i] == 0)
{
returnVal++;
}
}
return returnVal;
}
}
- 처음에는 문제에 나와있는대로 모든 경우의 수를 구하려다가 낭비가 너무 커지는것 같아서 포기했다.
- 원소의 자릿수가 같으면 내림차순 정렬이 가장 큰 값을 가지지만 원소의 자릿수가 달라지면 오름차순의 수가 가장 큰 값을 가지게된다. (ex. [10, 9], [9, 10] ▶ "109" < "910"), (ex. [2, 1], [1, 2] ▶ "21" > "12")
- 그래서 수로 정렬하지 않고, 두 원소의 값을 문자열로 합친 값을 비교하여 정렬함.
- 정렬한 배열의 값이 0만 있을경우 "0"으로만 반환되게끔 예외 처리를 함.
기타 사용한 함수들
- string.Join(string, object[])
반응형
'Stack > Coding test' 카테고리의 다른 글
[C++ / Lv2] 전화번호 목록 (0) | 2022.02.05 |
---|---|
[C++ / Lv1] 완주하지 못한 선수 (0) | 2022.02.04 |
[C++ / Lv2] 문자열 압축 (0) | 2022.02.02 |
[C# / Lv2] H-Index (0) | 2022.01.19 |
[C# / Lv1] k번째 수 (0) | 2022.01.17 |