본문 바로가기

카테고리 없음

파이선) KCPC - BOJ

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

 

3758번: KCPC

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫 번째 줄에는

www.acmicpc.net

 

T = int(input())

for i in range(T):
    # 팀의 수, 문제의 수, 내 팀 아이, 로엔트리
    n, k, t, m = map(int, input().split())

    dic = {}

    for idx in range(m):
        # 팀의 아이디. 문제번호, 점수
        i, j, s = map(int, input().split())

        if i not in dic:
            # 딕셔너리 저장
            # 0번째는 점수 배열
            # 1번째는 문제를 제출한 수
            # 2번째는 마지막으로 제출한 번호
            # 3번째는 팀 아이디
            dic[i] = []
            dic[i].append([0 for _ in range(k+1)])
            dic[i][0][j] = s
            dic[i].append(1)
            dic[i].append(idx)
            dic[i].append(i)
        else:
            dic[i][0][j] = max(s, dic[i][0][j])
            dic[i][1] += 1
            dic[i][2] = idx
    arr = list(dic.values())

    for team in range(len(arr)):
        # 각 팀의 점수 합산
        arr[team][0] = sum(arr[team][0])
    
    # 정렬
    arr.sort(key=lambda x: (-x[0], x[1], x[2]))
    for team in range(len(arr)):
        if arr[team][3] == t:
            print(team + 1)
            break

주어진 조건을 조금만 생각하면 충분히 풀 수 있는 문제였다.