폴더 분리
This commit is contained in:
63
workbook_8708/silver/3758-s2.py
Normal file
63
workbook_8708/silver/3758-s2.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# KCPC
|
||||
|
||||
import sys
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
|
||||
def write_board(board, i, j, s, idx):
|
||||
if not board.get(i, 0):
|
||||
board[i] = {"problems": {}, "submit_count": 0, "last_submit": -1}
|
||||
|
||||
board[i]["problems"][j] = max(board[i]["problems"].get(j, 0), s)
|
||||
board[i]["submit_count"] += 1
|
||||
board[i]["last_submit"] = idx
|
||||
|
||||
return
|
||||
|
||||
def check_our_rank(board, t):
|
||||
ranking = []
|
||||
for k in board:
|
||||
info = (k, -sum(board[k]["problems"].values()), board[k]["submit_count"], board[k]["last_submit"])
|
||||
ranking.append(info)
|
||||
|
||||
ranking.sort(key=lambda x: (x[1], x[2], x[3]))
|
||||
|
||||
for i, record in enumerate(ranking):
|
||||
if record[0] == t:
|
||||
return i+1
|
||||
|
||||
def test(n ,k ,t, m):
|
||||
board = {} # 팀id: {문제: {번호: 점수}, 제출 횟수: ~, 마지막 제출 인덱스: ~}
|
||||
for idx in range(m):
|
||||
i, j, s = map(int, input().rstrip().split())
|
||||
write_board(board, i, j, s, idx)
|
||||
|
||||
return check_our_rank(board, t)
|
||||
|
||||
|
||||
|
||||
def solution():
|
||||
T = int(input().rstrip())
|
||||
for _ in range(T):
|
||||
n, k, t, m = map(int, input().rstrip().split())
|
||||
print(test(n, k, t, m))
|
||||
|
||||
return
|
||||
|
||||
|
||||
solution()
|
||||
|
||||
"""
|
||||
걸린 시간: 40분
|
||||
|
||||
시간 복잡도: write_board가 O(1), check_our_rank가 sort때문에 O(nlogn)이므로, 이 둘을 활용한 test는 O(nlogn)이다.
|
||||
따라서 전체 시간복잡도는 test하는 횟수를 곱해서 O(Tnlogn)이다.
|
||||
|
||||
해설: 문제에서 시키는대로 구현하면 된다. 순위를 정하기 위해 마지막에 정렬해야 하는데 기준이 되는 요소들이
|
||||
최종 점수 > 제출 횟수 > 마지막 제출 시간이기 때문에 이 정보들을 dict에 기록하면서 진행하기로 했다.
|
||||
최종 점수를 계속 갱신하는 것이 신경쓸 것이 좀 있어서 마지막에 한번에 모아서 계산하는거랑 그때그때 갱신하는 거랑 시간복잡도는 같다고
|
||||
판단하여 마지막에 계산하였다.
|
||||
그 후 팀 id와 3가지 요소를 튜플로 묶어서 리스트에 넣은 다음 lambda를 활용하여 sort 하였다.
|
||||
동순위는 없으므로 팀 id가 t인 튜플의 인덱스+1을 한 것이 답이다.
|
||||
"""
|
||||
Reference in New Issue
Block a user