Jun's Development Journey

[BOJ] 1713번 후보 추천 본문

BOJ/Simulation

[BOJ] 1713번 후보 추천

J_Jayce 2021. 3. 8. 21:30

문제

www.acmicpc.net/problem/1713

 

1713번: 후보 추천하기

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

www.acmicpc.net

풀이

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

public class Main {
	static int N, R;
	static int[] reco;
	public static void main(String[] args) throws IOException {
        //선언 및 입력
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringBuilder sb = new StringBuilder();
    	StringTokenizer st;
    	Map<Integer, Integer> cntMap = new HashMap<Integer, Integer>();//key : 번호, value : 카운트
    	Map<Integer, Integer> idxMap = new HashMap<Integer, Integer>();//key : 번호, value : 인덱스
    	N = Integer.parseInt(br.readLine());
    	R = Integer.parseInt(br.readLine());
    	reco = new int[R];
    	
    	st = new StringTokenizer(br.readLine());
    	for(int i=0;i<R;i++) 
    		reco[i] = Integer.parseInt(st.nextToken());
    		
    	for(int i=0;i<R;i++) {
    		if(cntMap.containsKey(reco[i])) {//해당 번호 학생 존재할 때
    			cntMap.put(reco[i],cntMap.get(reco[i])+1);
    		}
    		else {//해당 번호 학생 없을 떄
    			if(cntMap.size() >= N){//사진 틀 꽉 찼을 떄
    				int minValue = Integer.MAX_VALUE;
    				int minIdx = Integer.MAX_VALUE;
    				int minIdxKey = 0;
    				for(Integer key : cntMap.keySet()) {
    					if(cntMap.get(key) < minValue) {
    						minValue = cntMap.get(key);
    						minIdxKey = key;
    					}
    						
    				}
    				for(Integer key : idxMap.keySet()) {
    					if(minValue == cntMap.get(key)) {
    						if(minIdx > idxMap.get(key)) {
    							minIdx = idxMap.get(key);
    							minIdxKey = key;
    						}
    					}
    				}
    				cntMap.remove(minIdxKey);
    				idxMap.remove(minIdxKey);
    			}
    			cntMap.put(reco[i], 1);
    			idxMap.put(reco[i], i);
    		}
    	}
    	List<Integer> list = new ArrayList<Integer>(cntMap.keySet());
    	Collections.sort(list);
    	for(Integer key : list)
    		System.out.print(key+" ");
    	System.out.println();
    	
    	
    	
    }
} 

'BOJ > Simulation' 카테고리의 다른 글

[BOJ] 20436번 ZOAC 3  (0) 2021.04.26
[BOJ] 13335 트럭  (0) 2021.02.24