#73. 백준 2750번 문제 풀이: 수 정렬하기 | 문제 원본 보기 |
--입력-- 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(배열이름, 배열전체크기, 항목한개크기, 비교함수); 를 넣어줘야 한다.
#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;
}