[伯俊]BOJ 1181 JAVA


BOJ 1181単語のソート

質問する


N個の小文字の単語がある場合は、次の条件に従ってプログラムを作成します.
길이가 짧은 것부터
길이가 같으면 사전 순으로

入力


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

しゅつりょく


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

サンプルI/O



ソースコード

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        List<String> list = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            list.add(br.readLine());
        }

        Set<String> stringSet = new HashSet<>(list);
        List<String> list2 = new ArrayList<>(stringSet);

        Collections.sort(list2, (o1, o2) -> {
            if (o1.length() == o2.length()) return o1.compareTo(o2);
            return o1.length() - o2.length();
        });

        for (String str : list2) {
            System.out.println(str);
        }
    }
}

Comment


  • 重複除外のためにHashSetを用いて複製し,Collection.sortに内蔵されたComparableのram多項式によりソートした.