2023
03.09

출처: 프로그래머스 코딩 테스트 연습
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으로 처리함.