코딩 테스트 [정렬] - 내림차순으로 자릿수 정렬하기

유의선·2023년 2월 15일
0

수가 주어지면 그 수의 각 자릿수를 내림차순으로 정렬하시오.


입력

1번째 줄에 정렬할 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수다.

출력

1반째 줄에 자릿수를 내림차순 정렬한 수를 출력한다.

예제 입력
2134

예제 출력
4321

1단계 - 문제 분석하기

먼저 숫자를 각 자릿수별로 나눌 필요가 있다. 나머지 연산으로 분리할 수도 있지만 여기선 입력값을 String으로 받은 후 substring() 함수를 이용해 자릿수를 분리하고, 이를 int형으로 변경해 배열에 저장하자. 그 다음에는 단순하게 배열을 정렬하면 된다.

2단계 - 손으로 풀어 보기

1 String 변수로 정렬할 데이터를 받아 int형 배열에 저장한다. 이때는 substring() 함수를 사용해 숫자를 각 자릿수별로 나눈 후 배열에 저장한다.

2 배열의 데이터를 선택 정렬 알고리즘을 이용해 내림차순 정렬한다.

3단계 - sudo코드 작성하기

str(정렬한 수)
A(자릿수별로 구분해 저장한 배열)

for(str의 길이만큼 반복) {
	A배열 저장 -> str.substring 사용
}

for(i : 0 ~ str의 길이) {
	for(j : i + 1 ~ str의 길이) {
    	현재 범위에서 Max값 찾기
    }
    현재 i값과 Max값 중 Max값이 더 크면 swap 수행
}

A배열 출력

4단계 - 코드 구현하기

import java.util.Scanner;

public class Q17 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        int[] A = new int[str.length()];
        for(int i = 0; i < str.length(); i++){
            A[i] = Integer.parseInt(str.substring(i, i+1));
        }

        for(int i = 0; i < str.length(); i++){
            int Max = i;
            for(int j = i + 1; j < str.length(); j++){
                if(A[j] > A[Max]){
                    Max = j;
                }
            }
            if(A[i] < A[Max]){
                int tmp = A[i];
                A[i] = A[Max];
                A[Max] = tmp;
            }
        }

        for(int i = 0; i < str.length(); i++){
            System.out.print(A[i]);
        }
    }
}

  • Do it! 알고리즘 코딩테스트 자바 편

0개의 댓글