Algorithm/백준

[백준]1181_단어 정렬_자바

나맘임 2024. 12. 4. 17:04

코드

public class 백준1181_단어정렬 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        int t = Integer.parseInt(reader.readLine());
        
        TreeSet<Word> dictionary = new TreeSet<>();
        for (int i = 0 ; i < t; i++){
            dictionary.add(new Word(reader.readLine()));
        }
        for (Word word : dictionary){
            System.out.println(word.word);
        }
    }
    private static class Word implements Comparable<Word>{
        private String word;

        public Word(String word) {
            this.word = word;
        }

        public String getWord() {
            return word;
        }

        @Override
        public int compareTo(Word o) {
            if (this.word.length() != o.word.length()) {
                return Integer.compare(this.word.length(), o.word.length());
            }
            return this.word.compareTo(o.word);
        }
    }
}

풀이

TreeSet와 Comparable

Set 구조 형식이나 자동으로 정렬이 되는 자료 구조

기본적으로 기본 변수를 넣을 시에 오름차순 정렬이다.

하지만, 안에 클래스를 넣을 경우엔 Comparable 인터페이스를 구현해야 한다.

이때, compareTo 메소드를 구현해야 하는데 결과값은 1,0,-1 을 반환해야 한다.

1을 리턴하면 현재 객체가 비교 객체보다 크다는 의미이고 0은 같음, -1은 작음을 의미한다.

 

결과론적으로 문제에서 제시한 두 정렬 조건에 자동으로 맞춰준다.

 

1. 길이가 짧은 것부터 

-> Integer.compare 메소드로

2. 길이가 같으면 사전 순으로

-> String.compareTo 메소드로

 

'Algorithm > 백준' 카테고리의 다른 글

[백준]2675_문자열반복_자바  (0) 2024.11.19
[백준]10809_알파벳 찾기_자바  (0) 2024.11.19