Development Logs/Algorithms

[JAVA] 백준 1181번 : 단어 정렬 (정렬)

유뱅유뱅뱅 2020. 10. 23. 11:13

www.acmicpc.net/problem/1181

문제

해결 방안

1. HashSet을 이용하여 입력을 받아 중복된 경우를 제거해준다.

2. ArrayList에 담아서 해당 ArrayList를 Collections.sort()를 이용하여 정렬해준다.
이 때, new Comparator를 사용하여 길이가 짧은 것과 길이가 같으면 사전순으로 정렬하는 코드를 구현해준다.

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

public class Main {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		int n = Integer.parseInt(str);
		
		HashSet<String> set = new HashSet<>();
		
		for(int i=0; i<n; i++) {
			set.add(br.readLine());
		}
		
		List<String> words = new ArrayList<>(set);
		
		Collections.sort(words, new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				if(s1.length() < s2.length())
					return -1;
				else if(s1.length() > s2.length())
					return 1;
				else
					return s1.compareTo(s2);
			}
		});
		
		for(String word : words) {
			System.out.println(word);
		}
	}

}