구름 LEVEL JAVA - 단어장 만들기 (난이도 2)

» algorithm

구름 난이도 2 단어장 만들기

문제 요약

  1. 단어의 개수 N , 찾을 단어의 위치 K 가 공백을 두고 입력되고 다음줄에는 단어들을 N개 만큼 입력.
  2. 이때 정렬을 단어 길이 오름차순(a , aa , aaa …)으로 바꾸고 그 다음 사전순으로 바꾼다.
  3. K에 위치한 단어는?

코드

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine() , " ");
        
        int N = Integer.parseInt(st.nextToken());
        ArrayList<String> wordArr = new ArrayList<>();
        for(int i=0; i<N; i++) {
             wordArr.add(br.readLine());
        }
        
        wordArr.sort(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();
                }
            }
        });
        
        System.out.println(wordArr.get( Integer.parseInt(st.nextToken()) - 1 ));
    }
}

풀이

  1. 입력 받은 N 만큼 반복문을 사용해 단어들을 ArrayList 에 입력 받는다.
  2. 입력 받은 ArrayList 를 sort 함수를 이용하되 특정 조건을 추가하려고 Comparator 를 재구성.
  3. 두 문자열의 길이가 같다면 compareTo 로 체크(사전순) , 아니라면 두 문자열의 길이를 뺀 순서로 체크.
  4. K 입력 된 숫자에 -1 을 해줘 해당 인덱스의 값을 확인한다.