본문 바로가기
PS/Baekjoon

[Baekjoon] 1181 - 단어 정렬

by 서현 SEOHYEON 2023. 6. 1.

📝 문제

 

 

 

🔑 풀이 과정

길이 순으로 정렬하는 것은 Comparator를 사용하면 된다는 것을 알았는데, 사전순으로는 어떻게 해야하는지가 걱정됐다.

그런데 String클래스의 compareTo 메서드를 사용하면 자동적으로 사전순 정렬이 된다.

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#compareTo-java.lang.String-

 

String (Java Platform SE 8 )

Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argum

docs.oracle.com

링크를 참고하자.

 

 

설명을 보면 두 문자열을 lexicographically(사전순으로) 비교한다고 적혀있다.

 

지정된 문자열이 인자로 들어온 문자열보다 사전순으로 빠르면 음수 반환

지정된 문자열이 인자로 들어온 문자열보다 사전순으로 느리면 양수 반환

--

문자열을 배열로 입력받고, Array.sort() + Comparator를 사용해서 길이를 비교한 후, 만약 길이가 같으면 compareTo를 사용해서 사전순인지를 비교한다.

그 후 정렬된 배열을 for문을 통해 출력한다. 다만 여기서 중복된 문자열은 제거(출력X)해야 하므로 현재 인덱스가 가리키는 문자열이 앞의 인덱스가 가리키는 문자열과 같으면(중복되면) 출력하지 않고 다음 인덱스로 넘어가게 한다.

 

 

 

🔓 답안

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        //입력 받기
        int N = Integer.parseInt(br.readLine());
        String[] arr = new String[N];

        for(int i = 0; i < N; i++){
            arr[i] = br.readLine();
        }

        //정렬
        Arrays.sort(arr, new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                if(o1.length() == o2.length()){
                    return o1.compareTo(o2); //길이가 같으면 사전순으로
                } else{ //길이가 다르면 짧은것 부터
                    return o1.length() - o2.length();
                }
            }
        });

        //출력(중복 제거)
        bw.write(arr[0] + "\n");
        for(int i = 1; i < N; i++){
            if(arr[i].equals(arr[i-1]))
                continue;
            else
                bw.write(arr[i] + "\n");
        }

        bw.flush();
        bw.close();

    }
}

 

 

 

🖤 알고리즘 분류

- 문자열

- 정렬

댓글