카테고리 없음

[백준 20006] - 랭킹전 대기열(구현) C++

SeoburiFaust 2024. 3. 18. 15:40

문제

https://www.acmicpc.net/problem/20006

 

20006번: 랭킹전 대기열

모든 생성된 방에 대해서 게임의 시작 유무와 방에 들어있는 플레이어들의 레벨과 아이디를 출력한다. 시작 유무와 플레이어의 정보들은 줄 바꿈으로 구분되며 레벨과 아이디는 한 줄에서 공백

www.acmicpc.net

접근방법

..

코드

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

#define FOR(i, n) for(int i=0;i<n;i++) 
#define FASTERIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

int p, m;
vector<int> gijun;
vector<vector<pair<int, string>>> bang;

bool insert(int temp, string name) {
    FOR(i, bang.size()) {
            if (bang[i].size() < m)
                if (temp <= gijun[i] + 10 && temp >= gijun[i] - 10) {
                    bang[i].push_back({temp, name});
                    return true;
                }
        }
    return false;
}

int main() {
    FASTERIO

    cin >> p >> m;
    FOR(i, p) {
        int temp; string name;
        cin >> temp >> name;
        //들어갈 방이 있으면 넣고, 아니면 방새로 생성.
        if (!insert(temp, name)) {
            bang.push_back({{temp, name}});
            gijun.push_back(temp);
        }
    }
    FOR(i, bang.size()) {
        if (bang[i].size() == m) 
            cout << "Started!" << "\n";
        else 
            cout << "Waiting!" << '\n';
        sort(bang[i].begin(), bang[i].end(), [](pair<int, string> a, pair<int, string> b) {
                return a.second < b.second;
        });
        FOR(j, bang[i].size()) cout << bang[i][j].first << " " << bang[i][j].second << "\n";
    }
    return 0;
}

결과

개선할 점

처음엔 정렬을 안해서, 두번 째는 Waiting일 때 플레이어를 출력하지 않아서 틀렸다.

 

제출하기 전에 문제를 꼼꼼히 다시 읽어보는 습관을 가져야겠다.