BOJ 20006 랭킹전 대기열

LONGNEW·2021년 3월 14일
0

BOJ

목록 보기
199/333

https://www.acmicpc.net/problem/20006
시간 1초, 메모리 256MB
input :

  • p m(1 ≤ p ≤ 300)(1 ≤ m ≤ 300)
  • l (1 ≤ l ≤ 500)닉네임 n

output :

  • 게임의 시작 유무와 방에 들어있는 플레이어들의 레벨과 아이디를 출력
  • 닉네임이 사전순으로 앞서는 플레이어부터 출력
  • 시작되었으면 Started!를 대기 중이면 Waiting!을 출력

조건 :

  • 플레이어가 입장을 신청하였을 때 매칭이 가능한 방이 없다면 새로운 방을 생성하고 입장시킨다. 이떄 해당 방에는 처음 입장한 플레이어의 레벨을 기준으로 -10부터 +10까지 입장 가능하다.

  • 입장 가능한 방이 있다면 입장시킨 후 방의 정원이 모두 찰 때까지 대기시킨다.

  • 이때 입장이 가능한 방이 여러 개라면 먼저 생성된 방에 입장한다. 방의 정원이 모두 차면 게임을 시작시킨다.


사실 그냥 별 거 없이 힙을 써가지고, 언제 만들어졌는지 저장을 한 후 이 '방'들을 꺼내서 레벨 제한이 몇인지, 길이가 어떻게 되는지 확인을 하며 추가를 하도록하면 된다.

그러면 왜 그렇게 많이 틀렸나???? 그냥 출력에 들어있는 조건중 사전 순을 읽지 않았다.....
언제나 정렬을 합시다....

import sys

p, m = map(int, sys.stdin.readline().split())
room = [[] for i in range(p)]

for i in range(p):
    l, n = sys.stdin.readline().split()
    for idx, item in enumerate(room):

        if 0 < len(room[idx]) < m:
            pivot_level = item[0][0]

            if pivot_level - 10 <= int(l) <= pivot_level + 10:
                room[idx].append((int(l), n))
                break
        if len(room[idx]) == 0:
            room[idx].append((int(l), n))
            break

for data in room:
    data.sort(key=lambda x: x[1])
    if len(data) == 0:
        continue

    if len(data) == m:
        print("Started!")
        for item in data:
            print(item[0], item[1])
    else:
        print("Waiting!")
        for item in data:
            print(item[0], item[1])

0개의 댓글