글 작성자: 취업중인 피터팬
728x90

https://www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

문제 설명

 

숫자 하나를 입력받고 자리수의 맞게 정렬하는 문제입니다.

 

보고 오기를 추천하는 게시물

https://kkungchan.tistory.com/293

 

자바로 구현한 카운팅 정렬(Counting Sort/계수 정렬) 알고리즘

카운팅 정렬은 많은 알고리즘 중에 O(n)에 시간복잡도를 가지는 엄청난 성능을 가진 정렬 방식이다. 보통 퀵 정렬(Quick Sort), 힙 정렬(Heap Sort), 합병 정렬(Merge Sort)이 빠르다는 정렬이지만 데이터끼

kkungchan.tistory.com

 

문제 풀이

해당 문제는 카운팅 정렬을 사용해 문제를 풀 것입니다. 카운팅 정렬은 위에 게시물에 설명되어 있으니 보고 오는 것을 추천드립니다.

카운팅 정렬을 사용해 해당 자리수의 수가 인덱스의 크기를 늘리게 될 것입니다.

해당 배열은 0~9까지 범위가 매우 작음으로 카운팅 정렬로 정렬하는 것이 매우 효율적입니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int[] array = new int[10];

        while(n > 0){
            array[n%10]++;
            n = n/10;
        }

        for(int i=array.length-1; i>=0; i--){
            while(array[i]-->0){
                System.out.print(i);
            }
        }

    }
}

반복문으로 배열을 만들고 해당 배열의 인덱스를 해당 수만큼 출력해주면 해결되는 문제입니다.