[백준] 20006: 랭킹전 대기열 - JAVA

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

풀이

플레이어의 레벨과 닉네임이 주어진다.

플레이어를 방에 적절하게 배치시켜야 하는데

생성된 방이 없거나 들어갈 방이 없다면 해당 플레이어의 레벨을 기준으로 방을 생성하고,

생성된 방 중에 해당 방의 레벨을 기준으로 -10부터 +10 사이에 플레이어의 레벨이 있다면 방에 입장시킨다.

방의 정원이 꽉 찼으면 더이상 들어갈 수 없다.

Node라는 클래스를 만들어 처음 선언될 때 해당 플레이어의 레벨로 초기화해주었고

닉네임 사전순으로 출력하기 위해 TreeMap에 넣어주었다.


메모리: 16396KB

시간: 172ms

언어: Java 11

코드

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

public class Main {
    static class Node {
        int level;
        TreeMap<String, Integer> map;

        public Node(int level) {
            this.level = level;
            map = new TreeMap<>();
        }
    }

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

        ArrayList<Node> list = new ArrayList<>();
        for (int i = 0; i < p; i++) {
            st = new StringTokenizer(br.readLine());
            int level = Integer.parseInt(st.nextToken());
            String name = st.nextToken();

            boolean flag = false;
            for (Node node : list) {
                if (node.map.size() == m) {
                    continue;
                }
                if (Math.abs(node.level - level) <= 10) {
                    node.map.put(name, level);
                    flag = true;
                    break;
                }
            }

            if (!flag) {
                Node node = new Node(level);
                node.map.put(name, level);
                list.add(node);
            }
        }

        StringBuilder sb = new StringBuilder();
        for (Node node : list) {
            if (node.map.size() < m) {
                sb.append("Waiting!").append("\n");
            } else {
                sb.append("Started!").append("\n");
            }

            for (Map.Entry<String, Integer> entry : node.map.entrySet()) {
                String name = entry.getKey();
                int level = entry.getValue();
                sb.append(level + " " + name).append("\n");
            }
        }

        System.out.println(sb);
    }

}