[프로그래머스] 랭킹전 대기열

2022. 9. 27. 17:38TIL💡/Algorithms

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

 

20006번: 랭킹전 대기열

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

www.acmicpc.net

적당한 자료구조에 주어진 조건에 따라 잘~ 구현하면 된다.

방 정보를 담는 vector를 쓰는데, 한 방에 담는 구성원들은 이름에 따라 정렬될 수 있도록 set을 쓴다.

 

#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<int> ppl;
vector<set<pair<string,int>>> rooms;
int main() {
	int p, m;
	cin >> p >> m;
	int level;
	string player;
	while(p--) {
		cin >> level >> player;
		bool finished = false;
		for(int i = 0;i < rooms.size();i++){
			auto & r = rooms[i];

			if(r.size() >= m) continue;
			int room_level = ppl[i];
			if(room_level - 10 <= level && level <= room_level + 10) {
				r.insert({player, level});
				finished = true;
				break;
			}
		}

		if(!finished) {
			ppl.push_back(level);
			set<pair<string,int>> new_room ={{player, level}};
			rooms.push_back(new_room);
		}
	}

	for(auto r: rooms) {
		if(r.size() == m) {
			printf("Started!\n");
		}
		else {
			printf("Waiting!\n");
		}

		for(auto p: r) {
			cout << p.second << " " << p.first << "\n";
		}
	}

}