문제 정의
실행 시점에 사용자가 입력한 이름 목록을 버블 정렬(bubble sort) 기법을 사용하여 알파벳 순서로 정렬하는 프로그램을 작성해 보겠습니다. 이 프로그램은 C 언어의 표준 문자열 함수인 strcmp()와 strcpy()를 활용합니다.
해결 방법
이름을 알파벳 순서로 정렬하는 핵심 로직은 다음과 같습니다. 인접한 두 문자열을 strcmp() 함수로 비교한 후, 순서가 잘못되어 있으면 strcpy() 함수를 사용해 두 문자열의 내용을 서로 교환합니다.
for (i=1; i < ITEMS; i++){
for (j=1; j <= ITEMS-i ; j++){
if (strcmp (string[j-1], string[j]) > 0){ /* 내용 교환 */
strcpy (dummy, string[j-1]);
strcpy (string[j-1], string[j]);
strcpy (string[j], dummy );
}
}
}핵심 문자열 함수
strcmp(str1, str2): 두 문자열을 사전순으로 비교합니다. str1이 str2보다 알파벳 순서상 뒤에 오면 양수를 반환하며, 이때 두 문자열의 위치를 바꿔야 합니다.
strcpy(dest, src): src 문자열을 dest로 복사합니다. 일반 변수와 달리 문자열은 대입 연산자로 직접 교환할 수 없기 때문에 임시 배열(dummy)을 거쳐 값을 옮겨야 합니다.
예제 코드
다음은 문자열 함수를 사용하여 이름 목록을 알파벳 순서로 정렬하는 완전한 C 프로그램입니다.
#define ITEMS 5
#define MAXCHAR 20
main( ){
char string[ITEMS][MAXCHAR], dummy[MAXCHAR];
int i = 0, j = 0;
/* 이름 목록 입력 */
printf ("Enter names of %d items \n ",ITEMS);
while (i < ITEMS)
scanf ("%s", string[i++]);
/* 정렬 시작 */
for (i=1; i < ITEMS; i++){
for (j=1; j <= ITEMS-i ; j++){
if (strcmp (string[j-1], string[j]) > 0){ /* 내용 교환 */
strcpy (dummy, string[j-1]);
strcpy (string[j-1], string[j]);
strcpy (string[j], dummy );
}
}
}
printf ("\nAlphabetical list \n\n");
for (i=0; i < ITEMS ; i++)
printf ("%s\n", string[i]);
}
코드 구성 요소
- ITEMS(5): 정렬할 이름의 개수를 정의합니다.
- MAXCHAR(20): 각 이름이 가질 수 있는 최대 문자 길이입니다.
- 2차원 배열 string: 여러 개의 문자열(이름)을 저장합니다.
- 이중 루프: 버블 정렬을 수행하며, 매 회전마다 가장 큰 값이 뒤로 이동합니다.
실행 결과
위 프로그램을 컴파일하여 실행하면 다음과 같은 출력을 확인할 수 있습니다.
Enter names of 5 items
computers
architecture
organization
microprocessor
networking
Alphabetical list
architecture
computers
microprocessor
networking
organization
정리
이 프로그램은 strcmp()와 strcpy() 두 가지 문자열 함수만으로 버블 정렬을 구현하여, 입력된 이름 목록을 알파벳 순서로 정렬하는 방법을 보여줍니다. 버블 정렬의 시간 복잡도는 O(n²)이므로 데이터 양이 적은 경우에 적합하며, 문자열 비교와 교환의 기본 원리를 이해하는 좋은 학습 예제입니다.