[C언어] 백준 1427. 소트인사이드

문제

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

입력

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

출력

첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.

구상

수는 크지만 각 자리수를 따서 정렬하는 문제이므로 큰 배열이 필요하지 않다.

간단한 정렬이므로 '수 정렬하기3' 문제에서 썼던 카운팅 정렬을 응용하여 정렬한 방법을 사용했다.

https://kiffblog.tistory.com/197

 

[C언어] 백준 10989. 수 정렬하기 3

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는

kiffblog.tistory.com

다만 내림차순으로 정렬해야 하므로 인덱스를 거꾸로 출력하도록 수정해야 한다.

코드

#include <stdio.h>

int main(void) 
{
    int arr[11] = { 0 };	//입력받을 배열
    int cntArr[10] = { 0 };	//정렬한 수를 저장할 배열
    int num;
    int i;
    scanf("%d", &num);
    
	//각 자리수를 따서 배열에 저장하기
    	//i는 몇 자리 수인지 기억
    for (i = 0;  num /= 10 > 0; i++) {
        arr[i] = num % 10;
        num /= 10;
    }
	//i(자리수)만큼 숫자에 해당하는 인덱스 +1
    for (int j = 0; j < i; j++) {
        cntArr[arr[j]] += 1;
    }
	//역순으로 출력
    for (i = 9; i >= 0; i--) {
        for (int j = 0; j < cntArr[i]; j++)
            printf("%d", i);
    }

    return 0;
}