https://www.acmicpc.net/problem/20006
문제조건
- 플레이어가 입장을 신청하였을 때 매칭이 가능한 방이 없다면 새로운 방을 생성하고 입장시킨다. 이떄 해당 방에는 처음 입장한 플레이어의 레벨을 기준으로 -10부터 +10까지 입장 가능하다.
- 입장 가능한 방이 있다면 입장시킨 후 방의 정원이 모두 찰 때까지 대기시킨다.
- 이때 입장이 가능한 방이 여러 개라면 먼저 생성된 방에 입장한다.
- 방의 정원이 모두 차면 게임을 시작시킨다.
먼저 입력을 받으면서 방을 만들어줬다. 방을 만드는 규칙은 간단하다.
- 현재까지 생성된 방을 모두 탐색하며, 매칭이가능하다면 다음 상대로 넘어간다.
- 현재까지 생성된 방을 모두 탐색했는데, 매칭가능한 방이 없다면 방을 새로만든다.
- idx로 마지막으로 생성된 방의 포인터를 저장한다.
소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int p, m;
bool cmp(pair<int, string> a, pair<int, string> b) {
return a.second < b.second;
}
vector<pair<int, string>> room[301];
int main() {
cin >> p >> m;
int idx = 0;
for (int i = 0; i < p; i++) {
bool check = false;
int l;
string n;
cin >> l >> n;
//방 만들기
for (int j = 0; j < idx; j++) {
if (room[j].front().first <= l + 10 && room[j].front().first >= l - 10 && room[j].size() < m) {
check = true;
room[j].push_back({ l,n });
break;
}
}
if (!check) {
room[idx].push_back({ l,n });
idx++;
}
}
for (vector<pair<int,string>> a : room) {
sort(a.begin(), a.end(), cmp);
if (a.size() == 0) break;
if (a.size() == m ) cout << "Started!" << '\n';
else cout << "Waiting!" << '\n';
for (int i = 0; i < a.size(); i++) cout << a[i].first << " " << a[i].second << '\n';
}
}
'Algorithm > 구현, 시뮬레이션' 카테고리의 다른 글
[BAEKJOON] 3190번 뱀 (0) | 2024.04.06 |
---|---|
[BAEKJOON] 13460번 구슬 탈출 2 (0) | 2024.04.05 |
[BAEKJOON] 22233번 가희와 키워드 (0) | 2024.03.25 |
[BAEKJOON] 8979번 올림픽 (0) | 2024.03.20 |
[BAEKJOON] 10431번 줄세우기 (1) | 2024.03.19 |