[BOJ_1181 | compareTo] 단어 정렬

2019. 1. 3. 11:06Computer Science/Problem Solving (PS)

save image



풀이




compareTo Method를 구현하면 Java.util.Arrays에 들어있는 sort 메소드를 사용하여 쉽게 정렬이 가능한 문제였다.

token이라는 클래스를 선언하고 이 클래스는 String을 변수로 갖는다.


token을 정렬할때의 기준을 세워주기 위해 compareTo 메소드를 구현했는데

비교해야 할 두 개의 스트링의 길이가 다른 경우에는 짧은 스트링이 앞에 오도록 기준을 세워주면 되고


스트링의 길이가 같은 경우에는

String내부에 있는 compareTo 메소드를 호출하였다.

(String내부에 있는 compareTo 메소드는 스트링을 사전순으로 정렬해준다.)


자바에서는 Sort함수를 제공하고 이 함수는

데이터의 개수와 여러 조건들에 따라서 가장 효율적인 정렬 알고리즘을 사용하기 때문에 

시간복잡도 면에서 굉장히 효율적이다.


혹시 compareTo 구현에 아직 어색하다면 이 문제를 풀어보는것도 괜찮을 것 같다.




소스 코드


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
import java.util.*;
public class BOJ_1181 {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        token[] arr = new token[n];
        for(int i=0;i<n;i++)arr[i] = new token(input.next());
        Arrays.sort(arr);
 
        for(int i=0;i<n-1;i++) {
           for(int j=i;j<n;j++){
               if(i!=&& arr[i].getStr().equals(arr[j].getStr())) arr[j] = new token(" ");
           }
        }
        for(int i=0;i<n;i++){ if(!arr[i].getStr().equals(" "))System.out.println(arr[i].getStr()); }
    }
}
class token implements Comparable<token>{
    private String str;
    token(String str){this.str = str;}
    public String getStr(){return str;}
    public int compareTo(token tok){
        if(str.length()<tok.getStr().length()) return -1;
        else if(str.length()>tok.getStr().length()) return 1;
        else return str.compareTo(tok.getStr());
    }
}
 
cs


반응형