PS

BOJ 20006 : 랭킹전 대기열

lickelon 2024. 12. 16. 20:53
  • 문제 링크 : boj.kr/20006
  • 난이도 : S2
  • 태그 : 구현

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

struct player{
    int level;
    string id;
};

struct room{
    int level;
    int limit;
    vector<player> players;
    room(int level, int limit) {
        this->level = level;
        this->limit = limit;
    }
    bool join(player p) {
        if(players.size() == limit) return false;
        if(abs(level - p.level) > 10) return false;
        players.emplace_back(p);
        return true;
    }
};

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int p, m;
    cin >> p >> m;

    vector<room> rooms;
    for(int i = 0; i < p; i++) {
        player p;
        cin >> p.level >> p.id;
        bool flag = false;
        for(auto &e : rooms) {
            if(e.join(p)) {
                flag = true;
                break;
            }
        }
        if(!flag) {
            rooms.emplace_back(p.level, m);
            rooms.back().join(p);
        }
    }

    for(auto room : rooms) {
        if(room.limit == room.players.size()) cout << "Started!\n";
        else cout << "Waiting!\n";
        sort(all(room.players), [](player a, player b){return a.id < b.id;});
        for(auto e : room.players) {
            cout << e.level << " " << e.id << "\n";
        }
    }

    return 0;
}

풀이

어렵지 않은 단순 구현 문제이다.

728x90

'PS' 카테고리의 다른 글

BOJ 6236 : 용돈 관리  (0) 2024.12.18
BOJ 9693 : 시파르  (0) 2024.12.17
BOJ 2942 : 퍼거슨과 사과  (1) 2024.12.15
BOJ 26168 : 배열 전체 탐색하기  (0) 2024.12.14
BOJ 24511 : queuestack  (0) 2024.12.14