알고리즘/백준

[백준] 1181번 단어정렬(반례) - Java

Chung-A 2021. 3. 4. 10:40

[백준] 1181번 단어정렬 - Java

 

문제 출처

www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 


 풀이

데이터를 입력받은 뒤

받은 데이터들을 Comparable 로 정렬을 어떻게 할 지 커스터마이징하여 단어를 문제에서 원하는 순서대로 정렬한 뒤

중복값은 제하고 출력하는 방법이다.

 

참고로 Comparable 정의는 두 수가 있을 때 양수 반환시 서로 자리를 바꾸고 0이나 음수를 반환하면 자리를 바꾸지 않는 방식으로 동작한다.


 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {
        //input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());

        List<String> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(br.readLine());
        }

        List<String> collect = list.stream().sorted((s1, s2) -> {
            if (s1.length() > s2.length()) {
                return 1;
            } else if (s1.length() < s2.length()) {
                return -1;
            } else {
                for (int i = 0; i < s1.length(); i++) {
                    if (s1.charAt(i) < s2.charAt(i)) {
                        return -1;
                    } else if (s1.charAt(i) > s2.charAt(i)) {
                        return 1;
                    }
                }
                return 0;
            }
        }).collect(Collectors.toList());

        StringBuilder stb = new StringBuilder();

        stb.append(collect.get(0)).append('\n');
        for (int i = 1; i < n; i++) {
            if (!collect.get(i).equals(collect.get(i - 1))) {
                stb.append(collect.get(i)).append('\n');
            }
        }
        System.out.println(stb);
    }
}

* 반례

6

aba

aab

aaa

ab

abb

aaaa

 

3

a

a

a

 

4

b

a

bb

aa