#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(string a, string b) { // 함수를 만들어서 함수 기준으로 정렬할 수 있다.
if(a.length() < b.length()){
return true; // a 길이가 작으면 그대로
} else if(a.length() == b.length()){
return a < b; // 길이 같으면 사전순
} else{
return false; // b가 a보다 작으면 반대로해라.
}
}
int main(int argc, char **argv){
int N;
scanf("%d",&N);
vector<string> v(N); // [] 말고 ()
for(int i=0; i<N; i++){
cin >> v[i];
}
sort(v.begin(),v.end(), compare); // 세번째 인자로 사용자가 정의한 함수 기준으로 정렬 가능
v.erase(unique(v.begin(), v.end()), v.end());
for(int i=0; i<v.size(); i++){
cout << v[i] << endl;
}
return 0;
}
이것도 다시 풀어봐야할 문제. C++의 언어적 특성을 배워가고 있는 중이다.
sort는 3번째 인자로 함수를 넣어 내가 원하는 방식으로 정렬을 할 수 있다. 시간 복잡도는 퀵소트를 사용하기에 O(NlogN)
인자로 들어가는 함수는 만약에 그대로 정렬을 진행하면 true, 반대로면 false를 반환해주면 된다. 비교 연산자(<, >)는 어떤 순서로 배열하면 될지를 알려준다. 위의 코드에서는 a가 b보다 작으므로 a가 b보다 앞에 sort될 것이다. 아직 공부가 더 필요한 듯.