알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
1.길이가 짧은 것부터
2.길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
조건에 따라 정렬하여 단어들을 출력한다.
1.HashSet을 사용하여 중복을 제외하고 저장
1.정렬을 하기위해 ArrayList에 저장
2.Collections 클래스의 sort() 함수를 이용해서 정렬
3.문자열이 같을 때는 사전순으로 정렬 (Compare())
//1.중복제거
//2 오름차순정렬
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
HashSet<String> hs_str = new HashSet<String>();
for(int i = 0; i < N; i++) {
String str = sc.next();
//중복제거
hs_str.add(str);
}
ArrayList<String> arr_str = new ArrayList<String>(hs_str);
//문자열 길이만큼 오름차순 정렬
Collections.sort(arr_str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
if(o1.length() > o2.length()) {
return 1;
}
else if(o1.length() < o2.length()) {
return -1;
}
//문자열이 같을때 사전순으로 정렬
else {
return o1.compareTo(o2);
}
}
});
느낀점
compare 함수에 return 값인 1,-1가 먼지 이해를 하지않고 사용하였다.
-1은 왼쪽 값, 1은 오른쪽 값 이었다.
compare은 문자열을 비교해서 문자열이 같을 땐 먼저 오는 순서를 출력해주는 함수였다. 이런 개념을 알 수 있는 문제여서 괜찮은거 같다.