백준 20006 랭킹전 대기열 (with Python)

daeungdaeung·2021년 6월 19일
0

어떤 문제?

제목에 적힌 문제이고, 시뮬레이션 문제입니다.

내가 작성한 Solution

문제에서 생각해볼 점

  • 필자는 게임을 시작할 수 있는 방을 먼저 출력하고 기다리는 방은 마지막에 출력하면 되는 줄 알았다.

  • 하지만 문제에서 요구하는 출력은 생성된 방의 시간 순서이므로 Started! 방과 Waiting! 방이 섞여 출력돼야 한다.

  • 아래 그림은 테스트 케이스가 주어지고 해당 테스트 케이스가 어떻게 설계 되고 결과적으로 어떻게 출력되어야 하는지 보여줍니다.

코드 구현

p, m = map(int, input().split())
people = []
for i in range(p):
    lv, id = input().split()
    people.append([int(lv), id])

rooms = []

for lv, id in people:
    flag = False
    for i in range(len(rooms)):
        if len(rooms[i][1]) == m:
            continue
        
        # 들어갈 수 있는 방이 있으면 입장
        if rooms[i][0] - 10 <= lv <= rooms[i][0] + 10:
            flag = True
            rooms[i][1].append([lv, id])
            break
            
    # 대기방에 들어 갈 수 없으면 새로운 방 생성
    if not flag:
        rooms.append([lv, [[lv, id]]])

# 방이 생성된 시간 순서로 출력
for i in range(len(rooms)):
    if len(rooms[i][1]) == m:
        print('Started!')
        tmp_ids = sorted(rooms[i][1], key=lambda x: x[1])
        for j in range(m):
            print(*tmp_ids[j])
    else:
        print('Waiting!')
        tmp_ids = sorted(rooms[i][1], key=lambda x: x[1])
        for j in range(len(tmp_ids)):
            print(*tmp_ids[j])
profile
개발자가 되고싶읍니다...

0개의 댓글

관련 채용 정보