Algorithm/Cases-BOJ

문자열 정렬

Xi_kor 2020. 7. 14. 18:58

문제

n개의 문자열이 주어질 때, 이 문자열을 사전순으로 빠른 순서대로 정렬하는 프로그램을 작성하시오.  

 

입력

첫 번째 줄에 문자열의 개수 n이 주어진다 ( 1 ≤ n ≤ 100 ) 그 후 n개의 줄에 대하여 정렬하고자 하는 문자열이 주어진다 ( 1 ≤ 문자열의 길이 ≤ 100 )  

 

출력

문자열을 사전순으로 빠른 순서대로 정렬한 결과를 출력한다.

 

예제 입력

9

acid

apple

banana

acquire

cat

crop

crab

power

cat

예제 출력

acid

acquire

apple

banana

cat

cat

crab

crop

power

 

------------------------------------------------------------------------------------------------------------------------------

 

문자열을 2차원 배열에 저장을 해놓고, 선택정렬을 해서 구하는 방식으로 사용했다. 선택정렬에서 두 값을 비교하는 함수는 strcmp를 사용했고, 위치를 변경할 때는 temp라는 문자형 배열을 선언한 뒤에 strcpy 함수를 통해 위치를 변경해주었다.

 

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	char arr[105][105];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	for (int i = 0; i < n; i++) {
		int inx = i;
		for (int j = i; j < n; j++) {
			if (strcmp(arr[inx], arr[j]) > 0) {
				inx = j;
			}
		}
		char temp[105];
		strcpy(temp, arr[i]);
		strcpy(arr[i], arr[inx]);
		strcpy(arr[inx], temp);
	}

	for (int i = 0; i < n; i++) {
		cout << arr[i] << endl;
	}
	return 0;
}