Files
baekjoon-study/workbook_8708/silver/3758-s2.py
2026-02-23 11:14:50 +09:00

63 lines
2.1 KiB
Python

# 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을 한 것이 답이다.
"""