본문 바로가기
C#/프로그래머스

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

by TODAYCODE 2021. 7. 31.
반응형

프로그래머스 코딩테스트 연습 Level 1 - 정수 내림차순으로 배치하기

 

코딩테스트 연습 - 정수 내림차순으로 배치하기

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

programmers.co.kr

문제의 핵심

1. string이 char의 배열이라는 것을 알고있는가?

 


 

문자열을 사용하지 않고 해결해보려고 개고생하다가 그냥 문자열 거쳐서 풀기로 했다.

 

입력된 숫자를 내림차순으로 재정렬을 해야하기 때문에

단순히 문자열로 바꾸는것보단 Char 배열로 문자하나씩 따로 저장하는게 효율적이다.

 

 

n.ToString()을 쓰면 정수형이 문자형으로 바뀌는데

n.ToString().ToCharArray()까지 입력하면 한번에 문자열이 글자별로 나뉜 Char 배열이 된다.

애초에 문자열이 Char형태가 모여있는 상태이기 때문에 가능한 일이다.

 

 

이렇게 배열로 만들었기 때문에

Array 메소드를 이용해서 Sort()로 정렬해주면 오름차순이 된다.

이 다음에 Reverse()를 해주면 내림차순으로 바뀐다.

 

 

이제 이 Char 배열을 다시 문자열로 바꾸고 정수형으로 만들어주면 된다.

new String()의 매개변수로 char배열을 넣어주면 문자열이 생성되고

이걸 정수형으로 이제 변환해주면 끝이다.

long으로 리턴해야함을 잊지 말자.

 

 

 

정답 코드

using System;

public class Solution {

    public long solution(long n) {
        long answer = 0;
        // n을 곧장 char형태로 변환해서 새로운 char 배열에 저장함
        char[] temp = n.ToString().ToCharArray();
        
        // 배열을 오름차순으로 정렬함
        Array.Sort(temp);
        
        // 배열을 뒤집는다 = 내림차순으로 바뀜
        Array.Reverse(temp);
        
        // temp배열을 문자열로 만든뒤에 long형태로 변환한다.
        // long이므로 ToInt32가 아니라 64다. 헷갈린다면 그냥 long.Parse를 쓰자.
        answer = Convert.ToInt64(new string(temp));
        
        // 정답을 리턴함
        return answer;
    }
}

 

 

반응형

댓글