반응형
📖 문제
https://www.acmicpc.net/problem/20006
💡 풀이 방식
• 구현, 시뮬레이션
필요 자료구조
- 플레이어 레벨, 이름, 방에 들어갔는지 여부 저장하는 Player 객체
- 플레이어 정보 저장용 배열
. p개의 플레이어 정보를 입력받을 Player 배열을 생성한다.
. p개의 플레이어 정보를 입력받는다.
. 현재 i번째 플레이어가 이미 방에 배치된 플레이어가 아니고, 레벨 차이가 10 이하라면, 방에 추가한다.
. 이름 순으로 정렬한 후 출려갛기 위해 플레이어 이름으로 정렬한다.
. 방의 정원이 모두 찬 경우, 게임을 시작한다. / 그게 아니라면 대기를 출력한다.
. 현재 i번쨰 방에 있는 플레이어 정보를 모두 출력한다.
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
import java.io.*;
import java.util.*;
public class Main {
public static class Player implements Comparable<Player> {
int level;
String name;
boolean check; // 플레이어가 방 참가 여부
Player(int level, String name) {
this.level = level;
this.name = name;
}
// 닉네임이 사전 순으로 앞서는 플레이어부터 출력
@Override
public int compareTo(Player p1) {
return name.compareTo(p1.name);
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int p = Integer.parseInt(st.nextToken()); // 플레이어 수
int m = Integer.parseInt(st.nextToken()); // 방 정원
Player[] players = new Player[p];
for (int i = 0 ; i < p ; i++) {
st = new StringTokenizer(br.readLine());
int level = Integer.parseInt(st.nextToken());
String name = st.nextToken();
players[i] = new Player(level, name);
}
for (int i = 0 ; i < p ; i++) {
ArrayList<Player> room = new ArrayList<>();
// 이미 방에 배치된 플레이어가 아니면 방에 추가
if (!players[i].check) {
for (int j = i ; j < p ; j++) {
// 방이 꽉 차면 종료
if (room.size() == m) {
break;
}
int level = players[j].level;
String name = players[j].name;
// 레벨 차이가 10 이하인 플레이어 방에 추가
if (!players[j].check && players[i].level - 10 <= level && players[i].level + 10 >= level) {
players[j].check = true;
room.add(new Player(level, name));
}
}
Collections.sort(room); // 플레이어 이름으로 정렬
if (room.size() == m) { // 방의 정원이 모두 찬 경우 게임 시작
sb.append("Started!").append("\n");
}
else {
sb.append("Waiting!").append("\n");
}
// 방에 있는 플레이어 정보 출력
for (Player player : room) {
sb.append(player.level).append(" ").append(player.name).append("\n");
}
}
}
System.out.println(sb);
}
}
|
cs |
➕ 다른 풀이 방식
- 방과 플레이어 정보 저장용 클래스를 2개 생성하고, 덱을 사용하셨다.
[백준] 20006: 랭킹전 대기열 (자바)
https://www.acmicpc.net/problem/20006
velog.io
💦 어려웠던 점
- 어떤 자료구조를 이용해 값들을 저장하고 활용하지 고민이 많이 되었다. (Map 쓸 생각도 했었다.)
🧐 새로 알게 된 내용
X
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
백준 20006 랭킹전 대기열(Java)
문제 출처 : https://www.acmicpc.net/problem/20006 20006번: 랭킹전 대기열 모든 생성된 방에 대해서 게임의 시작 유무와 방에 들어있는 플레이어들의 레벨과 아이디를 출력한다. 시작 유무와 플레이어의
jyunslog.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 22233번: 가희와 키워드 (0) | 2024.08.15 |
---|---|
[백준/JAVA] 1863번: 스카이라인 쉬운거 (0) | 2024.08.13 |
[백준/JAVA] 9017번: 크로스 컨트리 (0) | 2024.07.30 |
[백준/JAVA] 3758번: KCPC (0) | 2024.07.16 |
[백준/JAVA] 2531번: 회전 초밥 (0) | 2024.07.15 |