

-Code
import java.io.*;
import java.util.*;
public class BOJ20006 {
static class Room {
int playerCnt = 0;
int roomLimit;
int limitStart, limitEnd;
boolean isFull = false;
List<Player> joinPlayers = new ArrayList<>();
public Room (int playerCnt, int roomLimit, int limitStart, int limitEnd) {
this.playerCnt = playerCnt;
this.roomLimit = roomLimit;
this.limitStart = limitStart;
this.limitEnd = limitEnd;
}
// 잠여 가능한지 확인
public boolean isJoin(Player player) {
int playerLevel = player.level;
if (isFull) {
return false;
}
return limitStart <= playerLevel && limitEnd >= playerLevel;
}
// 유저 입장
public void addPlayer(Player player) {
this.playerCnt++;
this.joinPlayers.add(player);
if (this.roomLimit == this.playerCnt) {
this.isFull = true;
}
}
// 참여 플레이어 정렬 리스트 반환
public List<Player> sortJoinPlayers() {
Collections.sort(joinPlayers, (o1, o2) -> {
return o1.name.compareTo(o2.name);
});
return joinPlayers;
}
}
static class Player {
int level;
String name;
public Player(int level, String name) {
this.level = level;
this.name = name;
}
// 유저 출력
public String toString() {
return level + " " + name;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int playerCnt = Integer.parseInt(st.nextToken());
int roomLimit = Integer.parseInt(st.nextToken());
List<Room> rooms = new ArrayList<>();
for (int i = 0; i < playerCnt; i++) {
st = new StringTokenizer(br.readLine());
int playerLevel = Integer.parseInt(st.nextToken());
String playerName = st.nextToken();
Player player = new Player(playerLevel, playerName);
// 잠여 가능한지 확인
boolean isJoin = false;
for (Room room : rooms) {
if (room.isJoin(player)) {
// 잠여 가능하면 유저 추가
room.addPlayer(player);
isJoin = true;
break;
}
}
// 참여할 방이 없으면 방 만들기
if (!isJoin) {
Room room = new Room(0, roomLimit, playerLevel - 10, playerLevel + 10);
room.addPlayer(player);
rooms.add(room);
}
}
br.close();
// 출력
StringBuilder answer = new StringBuilder();
for (Room room : rooms) {
if (!room.isFull) {
answer.append("Waiting!").append("\n");
} else {
answer.append("Started!").append("\n");
}
for (Player player : room.sortJoinPlayers()) {
answer.append(player.toString()).append("\n");
}
}
System.out.println(answer);
}
}
객체를 분리하여 계산하도록 설계하고 했으나 몇 가지 잘못한 부분이 있었습니다.
limit가 1인 경우 바로 처리 안되는 부분과 Waiting인 경우에는 플레이어들을 출력 안 해야 하는 줄 알아서 틀렸고 이를 수정하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 11501번 주식 (0) | 2026.03.03 |
|---|---|
| [백준/Java] 31217번 Y (0) | 2026.03.03 |
| [백준/Java] 31066번 비 오는 날 (0) | 2026.03.02 |
| [백준/Java] 3758번 KCPC (0) | 2026.03.01 |
| [백준/Java] 17889번 Mars Window (0) | 2026.03.01 |