[백준] java 20920 영단어 암기는 괴로워

Sundae·2024년 1월 10일
0

백준

목록 보기
56/63
post-thumbnail
post-custom-banner

https://www.acmicpc.net/problem/20920


문제

입력

이미지 출처: 백준

풀이과정

Arrays.sort를 사용하면 쉽게 풀이가 가능한 것 같다. 1, 2, 3번의 정렬 기준을 제시해주면 될 것 같다.

대신 사전 준비가 조금 필요한데, 단어들의 출현 빈도를 알고있어야한다. 이는 HashMap을 사용해주었다.

다음은 자바로 풀이한 제출 코드이다.

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


public class Main{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken()), M = Integer.parseInt(st.nextToken());
        Map<String, Integer> map = new HashMap<>();
        while( N-- > 0 ){

            String word = br.readLine();
            if( word.length() >= M ){

                if(map.containsKey(word))
                    map.replace(word, map.get(word)+1);
                else
                    map.put(word,1);

            }
        }
        Node[] arr = new Node[map.size()];
        int index = 0;
        for( Map.Entry<String, Integer> entry : map.entrySet() )
            arr[index++] = new Node(entry.getKey(), entry.getValue());
            
		// 기준에 따른 정렬
        Arrays.sort(arr, (a,b)->{
            if( a.numOfAppear != b.numOfAppear )
                return Integer.compare( b.numOfAppear, a.numOfAppear);
            else if( a.word.length() != b.word.length())
                return Integer.compare( b.word.length(), a.word.length());
            else
                return a.word.compareTo(b.word);
        });

        Arrays.stream(arr).forEach( node ->  sb.append(node.word).append("\n"));
        System.out.println(sb);
    }
    static class Node{
        String word;
        int numOfAppear;
        Node(String word, int numOfAppear){
            this.word = word;
            this.numOfAppear = numOfAppear;
        }
    }
}
profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.
post-custom-banner

0개의 댓글