From 7f7c0475eb4b43eb6ba13de3f883266476655a73 Mon Sep 17 00:00:00 2001 From: nkey Date: Thu, 5 Feb 2026 09:35:54 +0900 Subject: [PATCH] =?UTF-8?q?20006-s2=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_8708/20006-s2.py | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 workbook_8708/20006-s2.py diff --git a/workbook_8708/20006-s2.py b/workbook_8708/20006-s2.py new file mode 100644 index 0000000..d636ced --- /dev/null +++ b/workbook_8708/20006-s2.py @@ -0,0 +1,47 @@ +# 랭킹전 대기열 + +import sys + +input = sys.stdin.readline + +def solution(): + p, m = map(int, input().rstrip().split()) + + room = {} + for i in range(p): + l, n = input().rstrip().split() + l = int(l) + for j in room: + if len(room[j]) < m and l >= j[0]-10 and l <= j[0]+10: + room[j].append((l, n)) + break + else: + room[(l, n)] = [(l, n)] + + for v in room.values(): + if len(v) == m: + print("Started!") + else: + print("Waiting!") + for j in sorted(v, key=lambda x: x[1]): + print(*j) + + return + + +solution() + +""" +걸린 시간: 50분 + +시간 복잡도: p개의 플레이어를 방에 분배하기 위해 각 방을 확인해보는 시간 복잡도도 균등분배 기준으로 p//m개 방이므로, O(p* p//m) = O(p^2*m)이다. +room.values()를 확인하며 정렬하고 출력하는 것은 p//m 즉 균등분배 가정으로 나올 수 있는 최대 방 개수만큼 정렬하기 때문에 +O(mlogm * p//m)이므로 O(plogm)이다. +따라서 전체 시간 복잡도는 O(p^2*m)이다. +p, m <= 300이기 때문에 그냥했지만 크기가 커진다면 모르기 때문에 들어갈 방을 범위로 나타내서 이분탐색을 하면 줄일 수 있다. +물론 방이 다 차면 같은 범위를 가지는 방이 또 필요할 수 있기 때문에 적절히 조치를 취해야한다. + +해설: p개의 플레이어를 확인하면서 맞는 room이 있다면 넣고, 없다면 room을 만든다. 이때, 딕셔너리를 사용했는데 level만 키로 쓰면 중복될 수 있으므로, +(level, name)을 키로 써서 해야한다. 플레이어마다 생성된 room을 순서대로 다 범위를 확인한다. (이분 탐색을 쓰면 더 좋겠다.) +다 room에 넣은 후 room 길이에 따라 started와 waiting을 쓰고, 이름 순으로 정렬한 뒤 출력한다. +""" \ No newline at end of file