개발 블로그

백준 1181: 단어 정렬 본문

프로그래밍/백준 문제풀이

백준 1181: 단어 정렬

갹둥 2022. 7. 17. 03:30

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

 

1181번: 단어 정렬

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

www.acmicpc.net

Arrays.sort()를 이용하여 정렬하였다. 첫번째는 String 객체에 기본적으로 구현되어있는 Comparator에 의해 알파벳 순서로 정렬이 된다. 그 후 새롭게 문자열을 비교해서 반환하는 Comparator를 구현하면 길이가 짧은 순서로 정렬된다. 

최종적으로는 길이 순으로, 그 중에서도 알파벳 순으로 정렬이 된다.

 

중복은 출력문에서 처리하였다. 앞에 위치한 문자열과 같다면 출력하지 않는다.

import java.util.*;

public class Main {

	public static void main(String[] args) {
		int N;
		Scanner sc = new Scanner(System.in);
		N=sc.nextInt();
		String[] arr = new String[N];
		
		for(int i=0; i<N; i++) {
			arr[i] = sc.next();
		}
	
		Arrays.sort(arr);
		Arrays.sort(arr, (s1, s2) -> 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]);
		}
	}
}

뭔가 더 좋은 방법이 있을 것 같지만...