꾸물꾸물 졔의 개발공부

백준 1181 - 단어정렬 (JAVA) 본문

알고리즘/백준

백준 1181 - 단어정렬 (JAVA)

체제 2021. 9. 28. 20:49

출처 - 백준 알고리즘

 

Arrays.sort() 를 이용해서 입력받은 문자열들을 정렬하려고 했지만, 여러가지 조건들이 붙어있다.

1. 같은 길이일 경우엔, 사전 순 

2. 같은 문자가 여러개 중복되있을 경우엔 하나만 출력 

 

이를 위해, Arrays.sort 의 comparator 을 사용하였다.

기본 구조로는 , 

Arrays.sort() 의 매개변수로는 정렬할 배열 , comparator<자료형> 이다. 

 

Arrays.sort ( 입력받은 문자열 배열, new Comparator<String> () {

    public int compare( 비교변수 1, 비교변수 2 ) {

    

   1. 길이가 같을 경우엔 비교변수 1 과 비교변수 2 를 비교 

   2. 길이가 다르다면, 비교변수 1의 길이 - 비교변수 2의 길이하여, 양의 정수이면 비교변수 1 의 길이가 더 긴것이므로 두개의 위치를 변환 ! 

 }

}); 

 

에서 반환형인 int 인 이유는, 

- 양의 정수 

- 0 

- 음의 정수 

중 하나의 형태로 반환 받아, 양의 정수일 경우엔 두개의 비교변수의 위치를 바꾸고, 

 0이나 음의 정수일 경우엔 그대로 둔다 .

 

 

--------정렬후엔 ,

문자열 길이 순서대로 정렬이 이미 되어있으므로, 앞 뒤 이웃한 문자열의 형태가 다르다면, stringbuilder 에 append 하고, 그렇지 않다면 무시 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package jihye01;
import java.util.*;
import java.io.*;
public class bj1181 {
    public static void main(String args[]) throws IOException {
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        int num=Integer.parseInt(br.readLine());
        String get[]= new String[num];
        for(int i=0; i<num; i++
            get[i]=br.readLine();
        
        Arrays.sort(get, new Comparator<String>() {
            public int compare(String s1, String s2) {
                if(s1.length()==s2.length())
                    return s1.compareTo(s2);
                else
                    return s1.length()-s2.length();
            }
        });
        StringBuilder sb= new StringBuilder();
        sb.append(get[0]).append('\n');
        for(int i=1; i< num; i++) {
            if(!get[i].equals(get[i-1]))
                sb.append(get[i]).append('\n');
        }
    System.out.println(sb);
    }
}
 
cs