#73. 백준 2750번 문제 풀이: 수 정렬하기 문제 원본 보기
N개의 수가 주어졌을 때, 오름차순으로 정렬하는 프로그램을 작성하시오.
입력/출력
--입력--
5
5
2
3
4
1
--출력--
1
2
3
4
5
문제풀이+해설
수를 정렬해서 출력하는 문제이다.

1. 주어진 수를 받아서 배열에 넣고,
2. 배열에 있는 수를 오름차순으로 정렬 한 후,
3. 출력해 준다.

문제의 조건에서 정렬 알고리즘을 구현하라는 조건이 없고, 다른 문제에서 알고리즘 구현이 많기 때문에, 여기서는 각 언어에서 제공하는 내장 소팅함수를 사용해서 처리해 보도록 하겠다.

창고로 대표적인 언어의 소팅함수를 간단히 소개하면,
파이썬: sort , sorted 함수
C언어: qsort 함수
C++: sort 함수

stdlib 에 포함된 qsort 함수는 다음과 같은 형태를 가지고 있다. void qsort(void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *)); qsort(배열이름, 배열전체크기, 항목한개크기, 비교함수); 를 넣어줘야 한다.
code sol.
#include <stdio.h>
#include <stdlib.h>

// qsort 에 사용할 비교함수 작성
int compare(const void *a, const void *b) {
  int n1 = *(int *)a, n2 = *(int *)b;
  // void 를 int 포인터로 변환뒤 역참조로 값을 가져온다.
  if(n1 < n2) return -1; else if(n1 > n2) return 1; 
  return 0; // a가 작으면 -1, 크면 1, 같으면 0 리턴
}

int main() {
  int i, N;
  int NS[1000]; // 숫자들을 저장할 리스트

  scanf("%d", &N); // 숫자를 입력받아 정수형으로 변환 후 N(수의 개수)에 대입
  for(i = 0; i < N; i++) { // N번 반복
    scanf("%d", &NS[i]); // 숫자를 하나씩 입력받아 리스트에 추가
  }
  // 문제에서 정렬 알고리즘을 구현하라는 조건이 없기 때문에 내장함수 qsort 사용
  qsort(NS, N, sizeof(int), compare); // 리스트 전용함수 sort 사용
  for(i = 0; i < N; i++) printf("%d\n", NS[i]); 
  // 정렬된 리스트를 개수 만큼 하나씩 출력
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.