백준

백준 1181 단어 정렬(Java)

Park DJ 2023. 1. 19. 20:43

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 먼저 Arrays.sort()의 Comparator 재정의를 한 후 Comparator에 있는 메서드인 compare를 오버 라이딩하면됩니다. 그리고 문자열의 길이가 같을 때는 사전순으로 정렬되게 return을 하면 됩니다. 마지막 중복값은 출력하지 않으므로 먼저 첫 번째 arr [0]을 출력시킨 후 앞의 값이랑 비교하면서 중복되지 않으면 출력하면 됩니다.


 

Java 코드

 


import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int n = Integer.parseInt(sc.nextLine());
    String[] arr = new String[n];

    for(int i = 0; i < n; i++) {
       arr[i] = sc.nextLine();
    }

    
    Arrays.sort(arr, new Comparator<String>() {
      public int compare(String s1, String s2) {
        if(s1.length() == s2.length()) return s1.compareTo(s2);
        else return s1.length() - s2.length();
      }
    });

    System.out.println(arr[0]);

    for(int i = 1; i < n; i++) {
       if(!arr[i].equals(arr[i - 1])) System.out.println(arr[i]);
    }

  }
}