diff --git a/workbook_8708/3758-s2.py b/workbook_8708/3758-s2.py new file mode 100644 index 0000000..e2cfa33 --- /dev/null +++ b/workbook_8708/3758-s2.py @@ -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을 한 것이 답이다. +""" \ No newline at end of file