프로그래머스 코딩테스트 연습
정렬 - 가장 큰 수
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
//프로그래머스 정렬 가장 큰 수
using System;
using System.Text;
public class Solution {
public string solution(int[] numbers) {
string answer = "";
//문자열 더하기를 위한 StringBuilder 변수 선언,
//기존의 String 형의 + 연산보다 메모리 참조가 적음.
StringBuilder sb = new StringBuilder();
//정수형으로 정렬을 하면 오차가 생기는 경우가 생기기에 문자형으로 변환 후 비교함.
Array.Sort(numbers, (x, y) =>
string.Compare(y.ToString()+x.ToString(),x.ToString()+y.ToString()));
//정렬된 수를 배열 크기만큼 반복해서 StringBuilder 변수에 더해줌.
for (int i = 0; i < numbers.Length; i++)
{
sb.Append(numbers[i].ToString());
}
//answer에 더한 StringBuilder 변수 sb를 문자열로 변환함.
answer = sb.ToString();
//받아오는 배열의 값이 모두 0 경우 0으로 반환 하기 위한 count 변수 선언 및 확인.
int count = 0;
//answer 안에서 문자 zero 가 0 이면 카운트 더하기.
foreach (var zero in answer)
{
if (zero == '0')
count++;
}
//카운트 수와 배열의 크기가 같으면 받은 모든 수가 0이므로 0을 반환.
if (count == numbers.Length)
return "0";
//아니면 answer 그대로 반환.
else
return answer;
}
}
댓글 영역