単語のソート


単語のソート


質問する


N個の小文字の単語がある場合は、次の条件に従ってプログラムを作成します.
短い始まりから.
同じ長さの場合は辞書順

入力


1行目は単語の個数Nを与える.(1≦N≦20000)2行目から、各行にN個の小文字からなる単語があります.指定された文字列の長さは50を超えません.

しゅつりょく


条件付きソートで単語を出力します.ただし,同じ単語が複数回入力されると,1回のみ出力される.

コード#コード#

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool comp(string a, string b) {
    if(a.length() == b.length()) // 길이가 같으면 사전순
        return a < b;
    else return a.length() < b.length(); // 길이가 짧은 순서로
}

int main() {
    int N;
    string tmp;
    vector<string> arr;

    /* 입력 */
    scanf("%d", &N);

    for(int i = 0; i < N; i++) {
        cin >> tmp;
        arr.push_back(tmp);
    }

    /* 풀이 */
    sort(arr.begin(), arr.end(), comp); // 정렬
    arr.erase(unique(arr.begin(), arr.end()), arr.end()); // 중복 제거

    /* 출력 */
    for(int i = 0; i < arr.size(); i++) {
        cout << arr[i] << "\n";
    }
}

追加の説明


今回はsort関数を直接作成するのではなく、提供されたsort関数を使用しました.
代わりにcomp関数を作成し、条件に従ってソートします.
またvectorのuniqueとerase関数を用いて重複を解消した.
ソース:https://www.acmicpc.net/problem/1181