#79. 백준 1427번 문제 풀이: 소트인사이드 문제 원본 보기
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 입력: 첫 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. 출력: 첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
입력/출력
--입력--
2143
--출력--
4321
--입력--
999998999
--출력--
999999998
--입력--
61423
--출력--
64321
--입력--
500613009
--출력--
965310000
문제풀이+해설
이번 문제의 요지는 숫자를 입력받아 처리한다 하지만, 사실상 숫자로 이루어진 문자열을 처리하는 것이다.
그리고 문자열이란 결국 문자들로 이루어진 배열로 처리하면 된다.
즉, 단순한 배열의 소팅이다.

입력된 숫자문자열을 배열로 만들어서 소팅하고 출력해 주면 해결된다.
C로 해결할 때 배열을 int 를 저장하는 배열에 넣어서 소팅하는 경우가 많은데, qsort 함수는 포인터로 조작이 가능하므로 문자열을 그대로 소팅할 수 있도록 비교함수를 만들어 주면 된다.
code sol.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// qsort 함수에서 사용할 내림차순용 비교함수
// char 문자값을 직접 비교하는 함수로 작성.
int compare_r( const void *a, const void *b) {
  char na = *(char *)a, nb = *(char *)b;
  if(na < nb) return 1; // 비교조건이 올림차순과 반대값으로 리턴
  if(na > nb) return -1;
  return 0;
}

int main() {
  char ns[11]; // 숫자형태의 문자열을 저장할 배열.
  
  scanf("%s", ns); // 문자열을 받는다.
  qsort(ns, strlen(ns), sizeof(char), compare_r); // 내림차순 소팅
  printf("%s", ns); // 소팅된 문자열을 출력.
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.