🛡️ 코딩테스트/🛡️ 코테 : 프로그래머스
C# 가장 큰 수 - 기수정렬 / 프로그래머스 [Lv.2]
맨텀
2023. 3. 9. 12:50
출처: 프로그래머스 코딩 테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/42746
나의 풀이
using System;
using System.Linq;
using System.Text;
public class Solution {
public string solution(int[] numbers)
{
var enumer = numbers.Select(s => s.ToString())
.OrderByDescending(o => $"{o}{o}{o}");
bool isZero = true;
var sb = new StringBuilder();
foreach(string str in enumer)
{
if(isZero && str == "0")
continue;
isZero = false;
sb.Append(str);
}
return isZero ? "0" : sb.ToString();
}
}
문자열을 반복해서 비교했다.
string은 정렬하면 사전순으로 정렬되기 때문에 그냥 바로 string으로 비교함.
다른사람풀이
using System;
using System.Linq;
using System.Text;
public class Solution {
public string solution(int[] numbers) {
StringBuilder sb = new StringBuilder();
string[] stringNumbers = new string[numbers.Length];
for (int i = 0; i < stringNumbers.Length; i++)
stringNumbers[i] = numbers[i].ToString();
Array.Sort(stringNumbers, (x, y) => string.Compare(y + x, x + y));
for (int i = 0; i < stringNumbers.Length; i++)
sb.Append(stringNumbers[i]);
var stringAns = sb.ToString();
return stringAns.ToCharArray()[0] == '0' ? "0" : stringAns;
}
}
정렬은 x + y / y + x 로 가상으로 붙여서 비교를 했다. 이게 정석인듯.
0비교는 일단 string으로 만든다음 0의 갯수를 세서 길이와 같으면 0으로 처리함.