import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Main {
static class WORD implements Comparable<WORD> {
String word; int length;
public WORD(String word, int length){
this.word=word; this.length=length;
}
public int compareTo(WORD w){
if(this.length>w.length)
return 1;
else if(this.length==w.length)
if(this.word.compareTo(w.word)>0)
return 1;
return -1;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
WORD[] arr = new WORD[n];
for(int i=0; i<n; i++){
String str = br.readLine();
arr[i] = new WORD(str, str.length());
}
Arrays.sort(arr);
LinkedHashSet<String> set = new LinkedHashSet<>();
for(int i=0; i<n; i++){
set.add(arr[i].word);
}
Iterator<String> it = set.iterator();
while(it.hasNext()){
sb.append(it.next()).append('\n');
}
System.out.print(sb);
br.close();
}
}
이 문제에서 생각해야 되는 건, 다음의 두 가지 이다.
1. 문자 순서 : 길이 비교 + 사전 순 비교
2. 문자 중복 제거
1. 문자 순서 정하기
WORD 클래스를 정의하고, Comparable 인터페이스를 이용해 compareTo() 메소드를 이용했다.
문자 순서를 정하기 위해서는 가장 먼저 문자 길이를 체크하고, 길이가 같은 경우 사전 순을 비교해야 한다.
WORD 클래스 안에 문자 길이(int length)와 사전 순 비교를 위해 문자 자체(String word)를 저장하여 사용했다.
1) 문자 길이는 오름차순 정렬로 (return 1)
2) 사전 순 비교는 String.compareTo() 를 이용했다.
이때 str1.compareTo(str2) 의 리턴값이 양수일 경우
= str1이 str2보다 사전 순서가 더 앞에 있음을 의미 (str1=a, str2=b 일 경우) 한다.
2. 문자 중복 제거
arr[] 배열을 이용하여 입력받은 모든 문자들을 조건에 맞추어 순서대로 저장했다. (1의 과정을 통해)
중복을 제거하기 위해서, 그리고 현재 정렬을 유지하기 위해서 LinkedHashSet 을 이용했다.
LinkedHashSet 에 arr[] 배열 값들을 저장하여 중복을 제거하고 출력했다.
'1d-1c > BOJ' 카테고리의 다른 글
14889_스타트와 링크 (JAVA) (0) | 2020.12.15 |
---|---|
10814_나이순 정렬 (JAVA) (0) | 2020.12.05 |
11650_좌표 정렬하기 (JAVA) (0) | 2020.12.04 |
1427_소트인사이드 (JAVA) (0) | 2020.12.04 |
1707_이분 그래프 (JAVA) (0) | 2020.12.03 |