diff --git "a/\353\260\261\354\244\200/Silver/20006.\342\200\205\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264/README.md" "b/\353\260\261\354\244\200/Silver/20006.\342\200\205\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264/README.md" new file mode 100644 index 0000000..8369295 --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/20006.\342\200\205\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264/README.md" @@ -0,0 +1,54 @@ +# [Silver II] 랭킹전 대기열 - 20006 + +[문제 링크](https://www.acmicpc.net/problem/20006) + +### 성능 요약 + +메모리: 32412 KB, 시간: 44 ms + +### 분류 + +구현, 시뮬레이션 + +### 제출 일자 + +2024년 12월 20일 15:46:35 + +### 문제 설명 + +

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

+ +

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

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

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

+ +### 입력 + +

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

+ +

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

+ +

입력된 순서대로 게임을 시작한다.

+ +

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

+ +### 출력 + +

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

+ +

방은 생성된 순서대로 출력한다.

+ +

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

+ +

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

+ diff --git "a/\353\260\261\354\244\200/Silver/20006.\342\200\205\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264/\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264.py" "b/\353\260\261\354\244\200/Silver/20006.\342\200\205\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264/\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264.py" new file mode 100644 index 0000000..9f3a3aa --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/20006.\342\200\205\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264/\353\236\255\355\202\271\354\240\204\342\200\205\353\214\200\352\270\260\354\227\264.py" @@ -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() \ No newline at end of file