Jun's Development Journey
[BOJ] 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 |