최코딩의 개발
[백준 20006번] 랭킹전 대기열 본문
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
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 2304번] 창고 다각형 (0) | 2024.12.22 |
---|---|
[백준 11501번] 주식 (0) | 2024.12.21 |
[백준 22233번] 가희와 키워드 (0) | 2024.12.20 |
[백준 19637번] IF문 좀 대신 써줘 (0) | 2024.12.19 |
[백준 17484번] 진우의 달 여행 (Small) (1) | 2024.12.16 |