[C++] 백준 1181 : 단어 정렬

Kim Nahyeong·2022년 1월 7일
0

백준

목록 보기
42/157

#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될 것이다. 아직 공부가 더 필요한 듯.

0개의 댓글