코딩블로그
백준 1713 - 실버 1 후보 추천하기 JAVA 본문
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