문자열정렬
다시푸는 코딩 테스트 준비 일지
응시 사이트 : BOJ
문제 : 1427.소트인사이트
사용언어 : C#
난이도 : 하
풀이시간 : 10m
유형 : 문자열, 정렬
문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
입력
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
예제 입력 1
2143
예제 출력 1
4321
예제 입력 2
999998999
예제 출력 2
999999998
예제 입력 3 복사
61423
예제 출력 3 복사
64321
예제 입력 4 복사
500613009
예제 출력 4 복사
965310000
문제 풀이 접근
이 문제의 요구사항은 단순 내림차순 정렬하여 출력이 끝이다.
두가지 방법으로 풀어봤는데, 원리는 똑같은데 스텝을 넣느냐 안넣느냐 차이다.
0번, 1번은 동일한데, 0번은 최대한 숏코딩, 1번은 일반적으로 풀이한 것이다.
방법론은 아래와같다.
내림차순 조건자를 애초에 넣어서 정렬 기준을 잡아준다.
오름차순으로 정렬한 후 reverse 한다.
되도록 조건자를 잡는방법을 안다면 1번이 한번에 정렬되어서 더 효율이 빠르다.
2번은 정렬하고 뒤집는 연산도 들어가기 때문에 비교적 느리다.
정답 작성 코드 (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.AccessControl;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Linq;
using static CodingTestProj.Program;
/*
* Difficulty : Easy
* URL : https://www.acmicpc.net/submit/1427
*/
namespace CodingTestProj
{
internal class Program
{
static void Main(string[] args)
{
//Case 0 _ Short
char[] convertC = Console.ReadLine().ToCharArray();
Array.Sort(convertC, (x, y) => { return y.CompareTo(x); });
Console.WriteLine(convertC);
//Case 1
//string input = Console.ReadLine();
//char[] convertC = input.ToCharArray();
//Array.Sort(convertC,(x,y) => { return y.CompareTo(x); });
//Console.WriteLine(convertC);
//Case2
//string input = Console.ReadLine();
//char[] convertC = input.ToCharArray();
//var revertC = convertC.Reverse();
//foreach(var element in revertC)
//{
// Console.Write(element);
//}
}
}
}