Victory in my life

Baekjoon 20006 | 랭킹전 대기열(Python) 본문

CodingTest/Baekjoon

Baekjoon 20006 | 랭킹전 대기열(Python)

tmdrn9 2025. 2. 24. 17:50

📌문제

SILVER2 / 구현 / 시뮬레이션

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

📌문제 분석 및 설계

이 문제는 나만 그런거같지만 이해가 잘 안됐다..

문제 설명에서 시스템순서에서 '입장 가능한 방이 있다면 입장시킨 후 방의 정원이 모두 찰 때까지 대기시킨다'란 말이 혼란을 일으킨것 같았다. 하지만 이 대기시킨다는 것은 모든 플레이어가 입장을 마친 후 방마다 정원확인 후에 하는 과정이었다..

그러니까 나는 시스템 설명이 다 순서대로 돌아가며, 입장이 한명씩되는 줄 알았다.. 왜냐면 입력 설명에도 입력된 순서대로 게임을 시작한다길래...

 

아무튼 대기 및 시작은 모든 플레이어가 방에 들어가고 하는 과정이라는 것..!

 

문제를 이해한 후에는 순수 구현문제라 쉽게 구현했다.

 

📌소스 코드

p,m=map(int, input().split())
room=[]
for i in range(p):
    level,name=input().split()
    level=int(level)
    if i==0:
        room.append([(level,name)])
    else:
        roomIn=False
        for i,r in enumerate(room): # 매칭 가능한 방 탐색
            if len(r)==m: #정원이 다 찬 방이면 패스
                continue
            first_l,_=r[0]
            if first_l-10<=level<=first_l+10: #처음 입장 플레이어의 레벨을 기준으로 -10부터 +10까지 입장 가능
                room[i].append((level,name))
                roomIn=True
                break
        if roomIn==False: ## 방 없다면 새로운 방을 생성하고 입장
            room.append([(level,name)])

for r in room:
    if len(r)==m:
        print('Started!')
    else:
        print('Waiting!')
    r.sort(key=lambda x:x[1])
    for level,name in r:
        print(level,name)