가장 큰 수
URL : https://programmers.co.kr/learn/courses/30/lessons/42746#
문제는 심플하다 주어진 numbers를 결합해서 가장 큰 수를 만드는 값을 return 하는 문제이다.
처음 짠 소스는 다음과 같다.
using System;
using System.Collections.Generic;
public class Info{
public int tempValue;
public int value;
public Info(int _realValue, int _tempValue){
value =_realValue;
tempValue =_tempValue;
}
public int GetValue(){
return value;;
}
public int GetTempValue(){
return this.tempValue;
}
}
public class Solution {
public string solution(int[] numbers) {
string answer = "";
List<Info> list = new List<Info>();
int maxLength = 4;
var builder = new System.Text.StringBuilder();
for(int i = 0;i<numbers.Length;i++){
if(builder.Length > 0){
builder.Remove(0,maxLength);
}
int realValue = numbers[i];
builder.Append(realValue.ToString());
while(builder.Length < 4 ){
builder.Append("0");
}
list.Add(new Info(realValue, int.Parse(builder.ToString())));
}
list.Sort((Info a, Info b)=>{
return b.GetTempValue().CompareTo(a.GetTempValue());
});
for(int i = 0; i<list.Count;i++){
answer += list[i].GetValue();
}
if( 0 == int.Parse(answer)){
answer = "0";
}
return answer;
}
}
시간 초과로 인해서 통과를 못하더라. 에효.. 값을 정상적으로 나온 걸 테스트했다.
나중에 검색하고 Linq를 통해서 최적화된 코드는 다음과 같다.
using System.Linq;
using System;
public string solution(int[] numbers) {
Array.Sort(numbers, (x,y)=>{
string tempXY = x.ToString() + y.ToString();
string tempYX = y.ToString() + x.ToString();
return tempYX.CompareTo(tempXY);
});
if(numbers.Where(x => x == 0).Count() == numbers.Length){
return "0";
}
else{
return string.Join("",numbers);
}
}
테스트 케이스 항목들이다.
// [[6, 10, 2], "6210"],
// [[3, 30, 34, 5, 9], "9534330"],
// [[10, 101], '10110'],
// [[1, 11, 111, 1111], '1111111111'],
// [[0, 0, 0, 0, 0, 0], '0'],
// [[2,20,200], '220200'],
// [[0,0,70], '7000'],
// [[0,0,0,1000], '1000000'],
// [[0,0,1000,0], '1000000'],
// [[1000,0,0], '100000'],
// [[12,121], '12121'],
// [[21,212], '21221'],
// [[11, 12, 10], '121110'],
// [[0,0,0,1], '1000'],
// [[1,2,3,1,1,3], '332111'],
// [[1,2,21, 21], '221211']
★★☆☆☆
반응형
'개발 > 문제풀이' 카테고리의 다른 글
문제풀이)프로그래머스)c#)계산기 (2) | 2021.02.01 |
---|---|
문제풀이)프로그래머스)c#) 여행경로 (0) | 2020.12.23 |
문제풀이)프로그래머스)c#) 단어퍼즐 (0) | 2020.08.31 |
문제풀이)프로그래머스)c#) 소수찾기 (0) | 2020.08.30 |
문제풀이)프로그래머스)c#) 카펫 (0) | 2020.08.27 |
댓글