백준 20920번 - 영단어 암기는 괴로워

박진형·2021년 9월 8일
0

algorithm

목록 보기
94/111

문제 풀이

map을 이용해서 외울 단어의 나오는 횟수를 저장한다.
외울 단어들은 Set 형식으로 저장해둔다.
외울 단어와 등장 횟수를 묶어 리스트에 추가한다.
문제에서 제시한 우선순위 대로 정렬함수를 짜고 정렬한다.
그 후 차례대로 출력한다.

문제 링크

boj/20920

소스코드

PS/20920.java

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


    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


        static class Word implements Comparable<Word>
        {
            String w;
            int freq;
            @Override
            public int compareTo(Word o) {
                if(this.freq == o.freq) {

                    if(this.w.length() == o.w.length()) {
                        return this.w.compareTo(o.w);
                    }
                    return o.w.length() - w.length();
                }
                else return (o.freq - this.freq);
            }

            public Word(String w, int freq) {
                this.w = w;
                this.freq = freq;
            }
        }
        public static void main(String[] args) throws IOException {
            StringTokenizer st = new StringTokenizer(br.readLine());
            HashMap<String, Word> map = new HashMap<>();
            int n =Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());
            List<String> wordSet = new ArrayList<>();
            List<Word> ans = new ArrayList<>();
            for(int i=0;i<n;i++)
            {
                String s = br.readLine();
                if(s.length() >=m)
                {
                    if(map.containsKey(s))
                    {
                        map.get(s).freq++;
                    }
                    else {
                        map.put(s, new Word(s, 0));
                        wordSet.add(s);
                    }
                }
            }

            for(int i=0;i<wordSet.size();i++)
            {
                ans.add(map.get(wordSet.get(i)));
            }
            Collections.sort(ans);
            for(int i=0;i<ans.size();i++)
            {
                bw.write(ans.get(i).w+"\n");
            }
            bw.flush();


        }
    }

0개의 댓글