

오늘은 크로스 컨트리 문제를 풀었다.
처음에는 배열로만 해보려고 하다가 너무 코드가 복잡해지고 이상해지는 것 같아서 코드를 찾아봤다.
많은 사람들이 map을 사용하여 푼 것을 보고 map이 쓰이는 것에 놀랐다.
map이 코테에 이렇게 많이 쓰이는구나 싶었다 :(
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(bufferedReader.readLine());
int answer[] = new int[T];
for(int i=0;i<T;i++) {
int N = Integer.parseInt(bufferedReader.readLine());
ArrayList<Integer> arr = new ArrayList<>();
HashMap <Integer, Integer> data = new HashMap<>(); // (팀 번호, 팀안에서 등수)
int [] rank = new int[N];
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int max = 0;
for(int j=0;j<N;j++){
int in = Integer.parseInt(stringTokenizer.nextToken());
data.put(in, data.getOrDefault(in, 0)+1);
rank[j] = in;
max = Math.max(max, in);
}
int [] fifth = new int[max + 1];
HashMap <Integer, Integer> count = new HashMap<>();
HashMap <Integer, Integer> tmp = new HashMap<>();
int score = 1;
for(int j : rank){
if(data.get(j) == 6){
tmp.put(j, tmp.getOrDefault(j, 0)+1);
if(tmp.get(j)<=4){
count.put(j, count.getOrDefault(j, 0)+score);
}
if(tmp.get(j) == 5){
fifth[j] = score;
}
score++;
}
}
int result = Integer.MAX_VALUE;
int fifthScore = Integer.MAX_VALUE;
for (Integer key : count.keySet()) {
int temp = count.get(key);
if (temp < result) { // 점수가 가장 낮은팀
result = temp;
fifthScore = fifth[key];
answer[i] = key;
} else if (temp == result) { // 점수 동점, 5번째 점수 낮을때 우승
if (fifthScore > fifth[key]) {
answer[i] = key;
}
}
}
}
for(int j:answer){
System.out.println(j);
}
}
}