백준 20006 (랭킹전 대기열) - Java
import java.io.*;
import java.util.*;
public class Main {
public static class Room
{
List<Player> players = new ArrayList<>();
}
public static class Player implements Comparable<Player>
{
int level;
String name;
public Player(int level, String name) {
this.level = level;
this.name = name;
}
@Override
public int compareTo(Player o) {
return name.compareTo(o.name);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int totalPlayer = Integer.parseInt(st.nextToken());
int maxPlayer = Integer.parseInt(st.nextToken());
ArrayList<Room> existRooms = new ArrayList<>();
for (int i = 0; i < totalPlayer; i++) {
st = new StringTokenizer(br.readLine());
int currLevel = Integer.parseInt(st.nextToken());
String currName = st.nextToken();
Boolean isOkInCurrRoom = false;
for (Room room : existRooms) {
if (room.players.size() >= maxPlayer) continue;
if (!room.players.isEmpty() && Math.abs(room.players.get(0).level - currLevel) <= 10) {
isOkInCurrRoom = true;
room.players.add(new Player(currLevel, currName));
break;
}
}
if (!isOkInCurrRoom) {
Room room = new Room();
room.players.add(new Player(currLevel, currName));
existRooms.add(room);
}
}
for (Room room : existRooms) {
Collections.sort(room.players);
if (room.players.size() == maxPlayer) bw.write("Started!\n");
else {
bw.write("Waiting!\n");
}
for (int i = 0; i < room.players.size(); i++) {
int resLevel = room.players.get(i).level;
String resName = room.players.get(i).name;
bw.write(resLevel + " " + resName + "\n");
}
}
bw.flush();
bw.close();
br.close();
}
}