반응형
문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
입력
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
구상
수는 크지만 각 자리수를 따서 정렬하는 문제이므로 큰 배열이 필요하지 않다.
간단한 정렬이므로 '수 정렬하기3' 문제에서 썼던 카운팅 정렬을 응용하여 정렬한 방법을 사용했다.
https://kiffblog.tistory.com/197
다만 내림차순으로 정렬해야 하므로 인덱스를 거꾸로 출력하도록 수정해야 한다.
코드
#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;
}
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
[C언어] 백준 5597. 과제 안 내신 분..? (0) | 2022.10.26 |
---|---|
[C언어] 백준 2920. 음계 (0) | 2022.10.24 |
[C언어] 백준 10989. 수 정렬하기 3 (0) | 2022.10.20 |
[C언어] 백준 2475. 검증수 (0) | 2022.10.18 |
[C언어] 백준 25305. 커트라인 (0) | 2022.10.18 |