카테고리 없음

백준 1713 - 실버 1 후보 추천하기 JAVA

_hanbxx_ 2024. 3. 22. 22:38
728x90

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

 

1713번: 후보 추천하기

첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대

www.acmicpc.net

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

// The main method must be in a class named "Main".
class Main {
    public static HashMap<Integer,Integer> keyMap;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int M = Integer.parseInt(br.readLine());
        List<Integer> arr = new ArrayList<>();
        keyMap = new HashMap<>();
        int[] lis = new int[M+1];
       StringBuilder sb = new StringBuilder();
        //초기화

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 1; i <= M; i++) {
            lis[i] = Integer.parseInt(st.nextToken());
        }

        int h = Arrays.stream(lis).max().orElse(0); 

        for (int i = 1; i <= h; i++) {
            keyMap.put(i,0);
        }

        
        for (int i = 1; i <= M; i++) {
            int temp = lis[i];
            if (arr.size() < N) {
                if (arr.contains(temp)) {
                    int c = keyMap.get(temp);
                    c++;
                    keyMap.put(temp, c);
                } else {
                    keyMap.put(temp,1);
                    arr.add(temp);
                }
            } else {
                if (arr.contains(temp)) {
                    int c = keyMap.get(temp);
                    c++;
                    keyMap.put(temp, c);
                } else {
                    int minVal = getMin(arr);
                    arr.remove(Integer.valueOf(minVal));
                    keyMap.put(minVal,0);
                    keyMap.put(temp,1);
                    arr.add(temp);
                }
            }
        }

        Collections.sort(arr);

        for (int iter : arr) {
             sb.append(iter+" ");
        }
        System.out.println(sb);

    }
    public static int getMin(List<Integer> arr) {
        int min = Integer.MAX_VALUE;
        int minIndx = Integer.MAX_VALUE;

        for (int a : arr) {
            int tempMin = keyMap.get(a);
            if (min > tempMin) {
                min = tempMin;
                minIndx = a;
            }
        }
        return minIndx;
    }
}
728x90