CodingTest/Baekjoon

[baekjoon] 백준 20006번(파이썬): 랭킹전 대기열

JunJangE 2022. 8. 19. 14:34

문제

 

20006번: 랭킹전 대기열

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

www.acmicpc.net

알고리즘

- 반복문을 통해 플레이어를 입력받아 방에 넣어준다.

- 각 방을 돌면서 조건에 합당하면 넣어준다.

- 못 들어간 플레이어가 있다면 새로운 방을 만들어 넣어준다.

- 이름 기준으로 정렬 후 출력한다.

코드

import sys

p, m = map(int, sys.stdin.readline().split())
rooms = []

# 각각의 플레이어를 입력 받아 방에 넣어주기
for _ in range(p):
    l, n = input().split()
    # 최초 입력된 플레이어
    if not rooms:
        rooms.append([[int(l), n]])
        continue

    # 방에 들어갔는지 확인 하는 flag변수
    enter = False
    # 각 방을 돌면서
    for room in rooms:
        # 조건에 합당하면 넣어주기
        if len(room) < m and room[0][0] - 10 <= int(l) <= room[0][0] + 10:
            room.append([int(l), n])
            enter = True
            break
    # 못들어갔으면 새로운 방을 파서 넣어주기
    if not enter:
        rooms.append([[int(l), n]])

# 이름 기준 정렬
for room in rooms:
    room.sort(key=lambda x: x[1])

# 정원 수에 따라 출력
for room in rooms:
    if len(room) == m:
        print('Started!')
    else:
        print('Waiting!')
    for player in room:
        print(*player)

github