프로그래머스 코딩테스트 연습

[프로그래머스 코테 C#] 정수 내림차순으로 배치하기

노재두내 2024. 9. 23. 14:51

문제

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.


풀이

일단 정수를 한자리씩 하기 위해서는 배열로 바꿔야겠다는 생각이 들었다.

long answer = 0;
string str=answer.ToString();
char []chars = str.ToCharArray();

정수 -> 문자열 -> 배열 

 

max가 잘 출력되고 있는지 확인하려고 찍어봤는데 

1이 아니고 49가 나옴 그래서 뭐지 했는데 

생각해보니 1이 현재 정수가 아닌 문자이기 때문에 그랬던것임

 

for문으로 풀이하려하니 너무 복잡해짐 분명 전에 메서드 있었던거같아서 찾아보기로 .. ==> Reverse() 메서드가 있다!

근데 크기 순으로 해야하니까 오름차순으로 정렬하고 뒤집어야한다.

오름차순하는 메서드는 Array.Sort()라는 메서드가 있음

using System; 

public class Solution {
    public long solution(long n) {
        long answer = 0;
        char[] chars = n.ToString().ToCharArray();
        Array.Sort(chars);
        Array.Reverse(chars);
        answer = Convert.ToInt64(new string(chars));

        return answer;
    }
}

이렇게 간단하게 코드 작성했다.

 

정답!


다른 사람 풀이 

using System.Linq;

public class Solution {
    public long solution(long n) {
        long answer = long.Parse(n.ToString().OrderByDescending(c => (int)c).ToArray());
        return answer;
    }
}

대부분 풀이가 비슷한데 이사람은 Enumerable.OrderByDescending 메서드를 사용했다.

OrderByDescending<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) 시퀀스의 요소를 키에 따라 내림차순으로 정렬합니다.

 

이 메서드를 사용하면 바로 내림차순으로 정렬할 수 있다.

댓글수0