Java/Algorithm

[Java-Algorithm] 백준 1181 단어정렬 풀이

Jeong Jeon
반응형

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

 

1181번: 단어 정렬

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

www.acmicpc.net

 

풀이 : 

 

우선 정렬을 위해 Arrays.sort를 사용했다.

Arrays.sort에 Comparator를 적용시켜, 정렬 방식을 정의할 수 있었다.

compare 메소드에서의 중요한점.!!!!!

a.compareTo(b)  메소드로, 사전순으로 정렬할 수 있었다. => 자동으로 해준다.!!!

추가적으로 compare 메소드의 return값은

양수

0

음수

세가지로 구분되는데,

양수일때 정렬이 바뀌고, 0과 음수일때는 정렬이 바뀌지 않는다.

 

import java.io.*;
import java.util.*;

/**
 *
 * 길이가 짧은 것부터
 * 길이가 같으면 사전 순으로
 * 첫줄에 단어 갯수 N
 */
public class baek1181 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int count = Integer.parseInt(br.readLine());
		String[] arr = new String[count];

		for (int i = 0; i < count; i++) {
			arr[i] = br.readLine();
		}
        
        br.close();
		Arrays.sort(arr,new Comparator<String>(){

			@Override
			public int compare(String o1, String o2) {
				//길이가 길다면
				if(o1.length() == o2.length()) {
					return o1.compareTo(o2);
				}else {
					return o1.length()-o2.length();
				}
			}
		});

		System.out.println(arr[0]);
		for (int i = 1; i < count; i++) {
			// 중복되지 않는 단어만 출력
			if (!arr[i].equals(arr[i - 1])) {
				System.out.println(arr[i]);
			}
		}
	}
}

 

반응형