이 문제에서는 문자열 배열이 주어지며, 입력으로 받은 모든 이름을 알파벳 오름차순으로 정렬하는 C 프로그램을 작성하는 것이 목표입니다.
예제를 통해 문제를 살펴보겠습니다.
입력
namesArray = ["Rishabh", "Jyoti", "Palak", "Akash"]
출력
["Akash", "Jyoti", "Palak", "Rishabh"]
문제 해결 접근 방법
C 표준 라이브러리의 qsort() 함수를 사용하면 손쉽게 해결할 수 있습니다. 정수 값을 정렬할 때와 기본 구조는 동일하지만, 이번에는 비교 대상이 정수가 아닌 문자열이라는 점이 다릅니다.
따라서 qsort()에 전달되는 비교 함수(comparator)를 수정해야 하며, 이때 strcmp() 함수를 사용해 두 문자열을 비교합니다. 이 방식을 활용하면 이름이나 문자열 배열을 간단하게 정렬할 수 있습니다.
핵심 포인트
- comparator 함수:
strcmp()의 반환값이 0 이상이면 1을 반환하여 두 문자열의 순서를 교환하도록 합니다. - qsort() 호출: 배열 이름, 요소 개수(n), 요소 하나의 크기(
sizeof(const char*)), 그리고 비교 함수를 인자로 전달합니다.
이름 또는 문자열 배열을 정렬하는 C 프로그램
예제 코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int comparator(const void* str1, const void* str2) {
if(strcmp(*(const char**)str1, *(const char**)str2) >= 0)
return 1;
else return 0;
}
int main() {
const char* arr[] = {"Rishabh", "Jyoti", "Palak", "Akash"};
int n = sizeof(arr) / sizeof(arr[0]);
printf("\nGiven array of names: \t");
for (int i = 0; i < n; i++) printf("%s \t", arr[i]);
qsort(arr, n, sizeof(const char*), comparator);
printf("\nSorted array of names: \t");
for (int i = 0; i < n; i++)
printf("%s \t", arr[i]);
return 0;
}실행 결과
Given array of names: Rishabh Jyoti Palak Akash Sorted array of names: Akash Jyoti Palak Rishabh
위 코드처럼 qsort()와 strcmp()를 조합하면 별도의 정렬 알고리즘을 직접 구현하지 않고도 문자열 배열을 효율적으로 정렬할 수 있습니다.