[Python] 알고리즘/Silver

[23056] 참가자 명단 (Python)

-Becca- 2021. 11. 9. 19:58

[문제]

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

 

23056번: 참가자 명단

첫째 줄에 학급 수인 $N$과 학급당 신청 가능한 인원수 $M$이 주어진다. ($N$은 짝수이고 $2\leq N \leq 10$, $1\leq M \leq 10$) 둘째 줄부터 신청된 순서대로 학생의 학급과 이름이 주어진다. 학생의 학급은

www.acmicpc.net


알고리즘 분류는 문자열, 정렬 입니다.

참가자 명단은 학급 오름차순, 이름의 길이, 사전 순 순서로 정렬합니다. (다중 정렬 필요)


[코드]

import sys

N, M = map(int, sys.stdin.readline().split())
li = list()
dt = dict()

while True:
    join = sys.stdin.readline().rstrip()

    if join == "0 0":
        break

    join = join.split()
    dt[join[0]] = dt.get(join[0], 0) + 1

    if dt[join[0]] <= M:
        li.append(join)

li = sorted(li, key=lambda x: (int(x[0]), len(x[1]), x[1]))
blue = list()
white = list()

for i in range(len(li)):
    if int(li[i][0]) % 2 == 0:
        white.append(" ".join(li[i]))
    else:
        blue.append(" ".join(li[i]))

for i in blue:
    print(i)
for i in white:
    print(i)