[코드트리 챌린지] 자주 등장한 top k 숫자

Lee-MyungMo·2023년 9월 15일
0

CodeTree

목록 보기
7/8

2주차 실력진단

문제


https://www.codetree.ai/missions/13/problems/top-k-frequent-elements?&utm_source=clipboard&utm_medium=text

풀이방법

  • HashMap을 사용하여 각 숫자가 몇개씩 나오는지 횟수를 넣어줌
  • keySet을 활용하여 ArrayList에 넣어준 다음 임의로 정렬기준을 정해준 뒤에 정렬 후 앞에서부터 k개를 꺼내줌

코드

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

public class Main {
    static class Pair implements Comparable<Pair> { // 객체 자료형의 정렬 기준 정해줌
        int key, val;

        Pair(int key, int val) {
            this.key = key;
            this.val = val;
        }

        @Override
        public int compareTo(Pair pair) {
            if (this.val == pair.val) { // 횟수가 동일하다면 숫자의 크기로 정렬
                return pair.key - this.key;
            }
            return pair.val - this.val;
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(stk.nextToken());
        int k = Integer.parseInt(stk.nextToken());

        Map<Integer, Integer> map = new HashMap<>(); // 데이터를 HashMap에 입력
        stk = new StringTokenizer(br.readLine(), " ");
        for (int i = 1; i <= n; i++) {
            int tmp = Integer.parseInt(stk.nextToken());
            if (map.containsKey(tmp)) {
                map.put(tmp, map.get(tmp) + 1);
            } else {
                map.put(tmp, 1);
            }
        }
        ArrayList<Pair> list = new ArrayList<>(); // keySet()을 사용하여 ArrayList에 넣어준 뒤 정렬
        for (int i : map.keySet()) {
            list.add(new Pair(i, map.get(i)));
        }
        Collections.sort(list);
        for (int i = 0; i < k; i++) {
            System.out.print(list.get(i).key + " ");
        }
    }
}

느낀점

오랜만에 HashMap을 사용한 문제풀이를 했다.
솔직히 챌린지 시작할 때만 해도 어차피 공부하는거 매일 써보자! 하고 시작했는데.. 요즘 서류도 쓸게 많고 코테 보는곳마다 떨어지니 지친다..
그리고 요즘 서류랑 코테랑 같이 점수를 내다보니 뭐가 부족한지 몰라서 컴컴한 미궁에 빠져있는 느낌..
졸업한지 이제 1개월차가 되어 무경력이 시작되었는데 좋은 결과 있었으면 좋겠다!
ps) 내일도 nc soft 코테를 본다..ㅎㅎ 서류는 6곳을 담주까지 넣어야하고..

profile
취준생

0개의 댓글