Skip to content

Commit

Permalink
[Silver II] Title: 랭킹전 대기열, Time: 44 ms, Memory: 32412 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
nahowo committed Dec 20, 2024
1 parent f858dae commit 0741352
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
54 changes: 54 additions & 0 deletions 백준/Silver/20006. 랭킹전 대기열/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# [Silver II] 랭킹전 대기열 - 20006

[문제 링크](https://www.acmicpc.net/problem/20006)

### 성능 요약

메모리: 32412 KB, 시간: 44 ms

### 분류

구현, 시뮬레이션

### 제출 일자

2024년 12월 20일 15:46:35

### 문제 설명

<p>종운이는 운영하던 게임에 랭킹전 기능을 추가하려고 한다. 플레이어 간의 실력차이가 있을 수 있기 때문에 입장을 신청하면 자신과 비슷한 레벨의 플레이어들을 매칭하여 게임을 시작하게 하려고 한다.</p>

<p>플레이어 간 매칭을 해주는 시스템은 다음과 같다.</p>

<ol>
<li>플레이어가 입장을 신청하였을 때 매칭이 가능한 방이 없다면 새로운 방을 생성하고 입장시킨다. 이떄 해당 방에는 처음 입장한 플레이어의 레벨을 기준으로 -10부터 +10까지 입장 가능하다.</li>
<li>입장 가능한 방이 있다면 입장시킨 후 방의 정원이 모두 찰 때까지 대기시킨다.
<ol>
<li>이때 입장이 가능한 방이 여러 개라면 먼저 생성된 방에 입장한다.</li>
</ol>
</li>
<li>방의 정원이 모두 차면 게임을 시작시킨다.</li>
</ol>

<p>플레이어의 수 p, 플레이어의 닉네임 n, 플레이어의 레벨 l, 방 한개의 정원 m이 주어졌을 때 위와 같은 방법으로 매칭해주고 최종적으로 만들어진 방의 상태와 입장 플레이어들을 출력하는 프로그램을 작성하자.</p>

### 입력

<p>첫 번째 줄에는 플레이어의 수 p(1 ≤ p ≤ 300)와 방의 정원 m(1 ≤ m ≤ 300)가 주어진다.</p>

<p>두 번째 줄부터 p개의 줄에는 플레이어의 레벨 l (1 ≤ l ≤ 500)과 닉네임 n이 공백을 두고 주어진다.</p>

<p>입력된 순서대로 게임을 시작한다.</p>

<p>닉네임은 중복되지 않으며 공백을 포함하지 않는 알파벳 소문자로 되어있으며 닉네임의 길이는 16을 넘지 않는다.</p>

### 출력

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

<p>방은 생성된 순서대로 출력한다.</p>

<p>방에 있는 플레이어들의 정보는 닉네임이 사전순으로 앞서는 플레이어부터 출력한다.</p>

<p>방이 시작되었으면 Started!를 대기 중이면 Waiting!을 출력시킨다.</p>

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import sys
input = sys.stdin.readline

def enterRoom(l, n):
for i in range(len(room)):
if room[i][1] < m and room[i][0] - 10 <= l <= room[i][0] + 10:
room[i][1] += 1
room[i][2].append(n)
return
room.append([l, 1, [n]])
return

def solution():
global m, room
p, m = map(int, input().split())
room = [] # [처음 입장한 플레이어의 레벨, 입장한 정원 수, [입장 멤버]]
level = dict()

for _ in range(p):
l, n = input().rstrip().split()
l = int(l)
enterRoom(l, n)
level[n] = l

for r in room:
if r[1] == m:
print("Started!")
else:
print("Waiting!")
for player in sorted(r[2]):
print(level[player], player)
return

solution()

0 comments on commit 0741352

Please sign in to comment.