본문 바로가기

카테고리 없음

파이썬) 랭킹전 대기열 -BOJ

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

p, m = map(int, input().split())

arr = []

for _ in range(p):
    lev, name = map(str, input().split())
    lev = int(lev)
    is_Join = False

    for i in range(len(arr)):
        if arr[i][0][0] - 10 <= lev <= arr[i][0][0]+10:
            if len(arr[i]) <= m-1:
                arr[i].append([lev, name])
                is_Join = True
                break
            arr[i].append([lev, name])
            is_Join = True

            if len(arr[i]) >= m:
                print('Started!')
                room = arr.pop(i)
                room.sort(key=lambda x: (x[1]))
                for k in room:
                    print(k[0], k[1])
                    # print(room[k][0], room[k][1])
                break

    if is_Join == False:
        arr.append([[lev, name]])

처음 제출한 코드이다.

우선 이 문제의 조건을 보자마자 구현으로 풀어도 충분하겠다 생각했고 즉시 실행에 옮겼다.

이 코드는 유저가 참여하자마자 방의 인원을 세고 인원이 m명이 되었다면 "Started!"를 출력해 방의 인원을 출력한다.

그러나 문제가 원하는 답은 모든 유저가 각 방에 참여한 "후" 방을 검사해 waiting 또는 started를 출력하는 것이다...

이것때문에 무엇이 틀렸는지 한참을 찾았다.

p, m = map(int, input().split())

arr = []

for _ in range(p):
    lev, name = map(str, input().split())
    lev = int(lev)
    is_Join = False

    for i in range(len(arr)):
        if arr[i][0][0] - 10 <= lev <= arr[i][0][0]+10:
            if len(arr[i]) <= m-1:
                arr[i].append([lev, name])
                is_Join = True
                break
            # arr[i].append([lev, name])
            # is_Join = True

            # if len(arr[i]) >= m:
            #     print('Started!')
            #     room = arr.pop(i)
            #     room.sort(key=lambda x: (x[1]))
            #     for k in room:
            #         print(k[0], k[1])
            #         # print(room[k][0], room[k][1])
            #     break

    if is_Join == False:
        arr.append([[lev, name]])

for room in arr:
    if len(room) >= m:
        print('Started!')
        room.sort(key=lambda x: x[1])

        for userinfo in room:
            print(userinfo[0], userinfo[1])
    else:
        print('Waiting!')

        room.sort(key=lambda x: x[1])
        for userinfo in room:
            print(userinfo[0], userinfo[1])

문제 조건에 맞게 수정한 코드이다.

역시... 문제를 잘 봐야한다. 또 하나 배우고 간다.