본문 바로가기

프로그래밍/기타

프로그래머스 - 가장 큰 수 (c#)

728x90
반응형
using System;
using System.Linq;
using System.Text;

public class Solution 
{
    public string solution(int[] numbers) 
    {         
        
        string[] numbersString = new string[numbers.Length];
        for (int i = 0; i < numbersString.Length; ++i)
            numbersString[i] = numbers[i].ToString();

        Array.Sort(numbersString, (x, y) => string.Compare(y + x, x + y));

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < numbersString.Length; i++)
            sb.Append(numbersString[i]);

        string finalNumbers = sb.ToString();
        if (finalNumbers.Any(match => match != '0'))
            return finalNumbers;

        return "0";
    }
}

위 코드블록은 다른분께서 풀이하신걸 조금 더 깔끔하고 빠르게 정리한 코드다.

내가 직접 풀었을때는 List 구조를 이용해서 경우의 수를 모두 찾고 정렬했는데

시간초과로 인하여 실패하였다.

한참을 고민하다가 다른분들의 풀이를 보았는데 이럴수가.. 저렇게 간단한 방법이 있을 줄이야..

 

해당 코드에 대해서 주요 부분만 간단하게 설명하자면

예) numbers의 값이 [6, 10, 2]일 경우

Array.Sort(numbersString, (x, y) => string.Compare(y + x, x + y));

이 부분에서 y + x과 y +x를 비교하게 되는데

'6'+'10'=610 > '10'+'6'=106

이런 식으로 비교하여 정렬하게 되고 최종적으로는 '6', '2', '10' 순으로 정렬이 된다.

 

참고로 string.Format이나 string + string을 하지 않고 StringBuilder.Append를 사용한 이유는

StringBuilder.Append가 string.Format이나 string + string보다 훨씬 빠르기 때문이다.

 

다람쥐와 포동포동이

 

 

 

 

RememberCook 9월 28일 정식 출시!

두번째 게임인 RememberCook이 출시되었습니다. 귀여운 캐릭터들이 나오는 간단한 게임이며 플레이어의 공간인지능력을 테스트하는 게임입니다. 아래 링크를 통해 다운 받으실 수 있으니 많은 관

chipmunk-plump-plump.tistory.com

반응형