이유's STUDY/알고리즘 문제풀이

[ 백준 ] 1181 - 단어 정렬 / Java 이용

살아가는 이유_EU 2021. 7. 27. 17:29
728x90
반응형

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // 단어 정렬 문제~!
        int N = Integer.parseInt(br.readLine());
        String[] strings = new String[N];
        for(int i=0; i<N; i++) {
            strings[i] = br.readLine();
            // 저장 완료
        }
        // 정렬 조건 두가지 --> 1. 길이짧은거 2. 사전 순서대로 (compareTo 이용)
        Arrays.sort(strings, (e1, e2) ->{
            if(e1.length() == e2.length()) {
                return e1.compareTo(e2);
            }
            else{
                return e1.length()-e2.length();
            }
        });
        // 좀 헷갈리는 부분 .. ..  : 같은 단어가 여러 번 입력 될 경우 한번씩만 출력
        sb.append(strings[0]).append('\n');
        for(int i =1; i<N; i++) {
            if(i>0) {
                if(!strings[i-1].equals(strings[i])) {
                    sb.append(strings[i]).append('\n');
                }
            }

        }
        System.out.println(sb);
    }

}

 

오늘 배운점 

1. String 배열을 정렬하는 방법 배움. 

  • - String 은 우선 compareTo 를 이용하여 해당 항목을 비교할 수 있고, 이는 사전순이다!  (int 는 단순히 > < 등으로 비교한 반면 ) 

 

2. 정렬 조건 두가지 처리 

  • - 우선순위 첫번째꺼 길이짧은 것 -> 그다음에 사전 순서대로 

 

3. 중복 피하기 

  • - 이미 정렬이 된 상태이므로 equalsTo 를 통해서 앞에 나온 항목이 출력이 됬다면 중복해서 출력하지 않는다. 

https://makemethink.tistory.com/179

 

[Java] 데이터 정렬 - Comparable, Comparator

애플리케이션을 만들거나 알고리즘 문제를 풀다보면 데이터를 순서대로 정렬할 일이 많아요. 물론 직접 알고리즘을 구현해도 되겠지만 자바에서 제공하는 기능을 편리하게 이용할 수도 있답니

makemethink.tistory.com

 

728x90
반응형