최코딩의 개발

[백준 20006번] 랭킹전 대기열 본문

코딩테스트/백준

[백준 20006번] 랭킹전 대기열

seung_ho_choi.s 2024. 12. 20. 17:19
728x90

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

 

package implement;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Implement20006 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        List<Object[]> list;
        Map<String, List<Object[]>> hashMap = new LinkedHashMap<>();
        int P = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        for (int i = 0; i < P; i++) {
            st = new StringTokenizer(br.readLine());
            int L = Integer.parseInt(st.nextToken());
            String N = st.nextToken();
            list = new ArrayList<>();

            boolean flag = false;
            for (String key : hashMap.keySet()) {
                List<Object[]> room = hashMap.get(key);
                if (room.size() != M) {
                    Object[] objects = room.get(0);
                    if ((int) objects[0] + 10 >= L && L >= (int) objects[0] - 10) {
                        room.add(new Object[]{L, L, N});
                        hashMap.put(key, room);
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag) {
                list.add(new Object[]{L, L, N});
                hashMap.put(UUID.randomUUID().toString(), list);
            }

        }


        for (String key : hashMap.keySet()) {
            List<Object[]> room = hashMap.get(key);
            Collections.sort(room, (o1, o2) -> {
                String name1 = (String) o1[2];
                String name2 = (String) o2[2];
                return name1.compareTo(name2);
            }); // 이름 기준 오름차순
            if (room.size() == M) {
                System.out.println("Started!");

            } else {
                System.out.println("Waiting!");
            }
            for (Object[] objects : room) {
                System.out.println(objects[1] + " " + objects[2]);
            }
        }


    }
}

 

해쉬 맵 문제는 너무  좋다 ㅎㅎ 

이 문제의 핵심은 첫 플레이어의 전투력을 기준으로 방을 생성하여 -10 ~ +10의 플레이어들이 들어오게 하는것이다.  

첫 플레이어의 전투력을 HashMap의 Key 값으로 넣어 비교할려 했으나, 만약 그 방이 다 꽉차고 다른 플레이어가 첫 플레이어의 전투력과 똑같을 때 이전 방의 정보들이 다 날라간다.. 

따라서 Key 값은 그냥 UUID로 해놓고 List<Object[]> 을 만들어 첫번째 요소에다가 전투력을 넣었고 그것을 기준으로 판단하면서 알고리즘을 구현했다. 

728x90