Algorithm/백준 문제풀이

[백준] 29160 나의 FIFA 팀 가치는?

너지살 2024. 5. 4. 12:16

 

 

 

문제 출저

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

 

 

 

문제 풀이

문제를 요약하면 매년 각 포지션 별로 가장 능력치가 좋은 선수들의 능력치가 1씩 떨어집니다. 능력치는 1이하로는 떨어지지 않습니다. k 년 후에 각 포지션을 모두 더한 총합을 구해야 합니다. 

 

 

우선순위 큐로 문저를 풀었습니다.

1부터 11까지 각 포지션 별로 능력치가 높은 순서로 우선순위 큐를 만들었습니다. 포지션 별로 선수들을 집어넣습니다. k번 각 포지션 별 능력 좋은 사람을 꺼내 1을 감소하고 다시 우선순위 큐에 집어넣습니다. 이러면 손쉽게 가장 능력치가 좋은 사람을 선택할 수 있습니다. k번 반복하고 각 포지션 별로 가장 높은 능력치의 총합을 구했습니다. 

 

 

 

소스 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

/*
나의 FIFA 팀 가치는?
https://www.acmicpc.net/problem/29160
 */

public class Main {

    static int n; // 선수 수
    static int k; // 년수

    static PriorityQueue<Integer>[] players;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        players = new PriorityQueue[12];
        for (int i = 0; i < 12; i++) {
            players[i] = new PriorityQueue<>(Comparator.reverseOrder());
        }

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        while (n-- > 0) {
            st = new StringTokenizer(br.readLine());
            int position = Integer.parseInt(st.nextToken());
            int value = Integer.parseInt(st.nextToken());

            players[position].add(value);
        }

        while (k-- > 0) {
            for (int i = 1; i <= 11; i++) {
                if (!players[i].isEmpty() && players[i].peek() > 1) {
                    int value = players[i].poll();
                    players[i].add(value-1);
                }
            }
        }

        int answer = 0;
        for (int i = 1; i <= 11; i++) {
            if (!players[i].isEmpty()) {
                answer += players[i].poll();
            }
        }

        System.out.println(answer);

    }

}