출처: https://www.acmicpc.net/problem/10814
Count Sort
#include <iostream>
using namespace std;
struct member {
int age;
string name;
};
int main() {
int N;
cin >> N;
member *input = new member[N];
member *output = new member[N];
int temp[201] = {0}; // 1부터 200까지이므로
for (int i=0; i<N; i++) {
cin >> input[i].age >> input[i].name; // input할 배열 입력
temp[input[i].age]++; // age의 개수 저장
}
for (int i=1; i<201; i++) // age의 개수 누적
temp[i] += temp[i-1];
for (int i=N-1; i>=0; i--) { // output에 input 마지막부터 저장
temp[input[i].age]--;
output[temp[input[i].age]].age = input[i].age;
output[temp[input[i].age]].name = input[i].name;
}
for (int i=0; i<N; i++) {
cout << output[i].age << " " << output[i].name << '\n'; // https://www.acmicpc.net/board/view/5096
}
delete[] input;
delete[] output;
return 0;
}
주의할 점
- 1부터 200까지의 숫자를 다뤄야 하므로 temp size는 201인 것이 편안하다. (index를 1부터 200까지 써야하므로)
- endl은 생각보다 많은 시간을 써야한다. \n를 사용해도 충분히 빨라진다.