본문 바로가기

Algorithm/Baekjoon

[백준_JAVA_알고리즘] 1181 단어 정렬

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(bufferedReader.readLine());
        String[] arr = new String[N];

        for (int i = 0; i < N; i++) {
            arr[i] = bufferedReader.readLine();
        }

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

        String[] result = Arrays.stream(arr)
                                .distinct()
                                .toArray(String[]::new);

        for (String str : result) {
            if (str != null) {
                bufferedWriter.write(str + "\n");
            }
        }

        bufferedWriter.flush();
        bufferedReader.close();
        bufferedWriter.close();
    }
}

이 문제는 Arrays.sort()에서 Comparator을 사용해야 하는 문제이다...

Comparator 을 잘 몰라서 헤맸다..

2024.02.08 - [Java] - [JAVA] Comparator 이해하기

 

그리고 .toArray(String[]::new)는 스트림의 모든 요소를 수집하여 새로운 String 배열을 만드는 메서드이다.

arr[] 의 요소를 result[] 에 담아 출력하기 위한 것이다