[백준] 9017: 크로스 컨트리 - JAVA

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

풀이

6명이 참여한 팀만 점수가 들어가며, 팀 당 상위 네명의 주자 합이 팀의 점수가 된다.

팀의 점수가 같을 경우 다섯번째 선수의 점수가 우승을 결정한다.

우선순위큐를 써야겠다고 생각이 들었다.

입력을 받으면서 팀 당 몇명인지 카운트를 해주었고, 6명인팀만 점수 계산을 하여 우선순위큐에 넣었다.

우선순위큐의 정렬 기준을 문제에 나와있는대로 적용했기때문에

우선순위큐에서 poll 하여 출력하면 된다.


메모리: 16448KB

시간: 184ms

언어: Java 11

코드

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

public class Main {

    static class Team implements Comparable<Team> {
        int no;
        int score;
        int[] records;

        public Team(int no, int score, int[] records) {
            this.no = no;
            this.score = score;
            this.records = records;
        }

        @Override
        public int compareTo(Team o) {
            if (this.score == o.score) {
                return Integer.compare(this.records[4], o.records[4]);
            }
            return Integer.compare(this.score, o.score);
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        for (int tc = 0; tc < T; tc++) {
            int N = Integer.parseInt(br.readLine());

            int[] arr = new int[N];
            int[] count = new int[201];
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int i = 0; i < N; i++) {
                arr[i] = Integer.parseInt(st.nextToken());
                count[arr[i]]++;
            }

            ArrayList<ArrayList<Integer>> list = new ArrayList<>();
            for (int i = 0; i <= 201; i++) {
                list.add(new ArrayList<>());
            }
            int score = 1;
            for (int i = 0; i < N; i++) {
                if (count[arr[i]] == 6) {
                    list.get(arr[i]).add(score++);
                }
            }

            PriorityQueue<Team> pq = new PriorityQueue<>();
            for (int i = 0; i < 201; i++) {
                if (!list.get(i).isEmpty()) {
                    int[] tmp = new int[6];
                    for (int j = 0; j < 6; j++) {
                        tmp[j] = list.get(i).get(j);
                    }
                    Arrays.sort(tmp);
                    int sum = 0;
                    for (int j = 0; j < 4; j++) {
                        sum += tmp[j];
                    }
                    pq.add(new Team(i, sum, tmp));
                }
            }

            sb.append(pq.poll().no).append("\n");
        }

        System.out.println(sb);
    }

}