#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) //
{
int num1 = *(int *)a;
int num2 = *(int *)b;
if (num1 < num2) // 내림차순이라 부등호 바꿈
return 1;
if (num1 > num2)
return -1;
return 0;
}
int main()
{
int i;
int n;
int len;
scanf("%d", &n);
int t = n;
int s = n;
len = 0;
while (s > 0)
{
t = s % 10;
s = s / 10;
len++;
}
int arr[len]; // 처음에 int arr[n]으로 걍 때려박았는데
// 손해가 너무 심해서 len수를 구한다음에 딱 저장할 공간만 만들어주었다.
i = 0;
while (n > 0)
{
t = n % 10;
n = n / 10;
arr[i] = t;
i++;
} // arr[i]에 각 자리수 넣어주기
qsort(arr, len, sizeof(int), compare); // 퀵 정렬
i = 0;
while (i < len)
{
printf("%d", arr[i]);
i++;
}
}
https://miingjeong.tistory.com/47
이 사람은 char형으로 입력받았다. 따라서 %10 /10을 할 필요가 없다.
또한 문자형이기에 바로 strlen을 사용해서 길이를 구할 수 있었다.
char형 배열을 int형으로 다시 넣어주기 위해 arr배열을 만들었고, -'0'을 통해 int형으로 바꾸어주며 넣었다.
#include <stdio.h>
#include <string.h>
int main()
{
int arr[10000] = {0, };
char s[10000];
int tmp = 0;
int i, j;
scanf("%s", &s);
for (i = 0; i < strlen(s); i++)
arr[i] = s[i] - '0';
for (i = 0; i < strlen(s) - 1; i++)
{
for (j = 0; j < strlen(s) - 1; j++)
{
if (arr[j] < arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
for (i = 0; i < strlen(s); i++)
printf("%d", arr[i]);
return 0;
}