[Softeer]

Question

Language: Python

해당 문제는 각 대회별 성적을 조사해서 각 대회별 등수를 계산하고, 최종적으로 점수의 합산을 해서 최종 등수를 구하는 문제이다.

동점인 경우에 대해서는 공동 등수가 발생할 수 있기 때문에 같은 점수를 가지는 사람의 명수를 저장하는 변수를 잡아서 등수의 변화를 계산한다.

Solution

import sys
from collections import Counter

def cal_ranking(scores):
    same_rank_count,rank=1,0
    rankings=[0]*n

    scores.sort(key=lambda x: -x[0])
    prev_score=scores[0]

    for score, index in scores:
        #점수가 다른 경우
        if prev_score != score:
            prev_score=score
            rank+=same_rank_count
            same_rank_count=1
        #동점인 경우
        else:
            same_rank_count+=1

        rankings[index]=rank
    return rankings

def solution():
    total_score=[]

    for i in range(n):
        score=0
        for j in range(3):
            score+=contests[j][i][0]
        total_score.append((score,i))


    for i in range(3):
        print(*cal_ranking(contests[i]))
    
    print(*cal_ranking(total_score))

if __name__ == "__main__":
    n=int(sys.stdin.readline())
    contests=[list((score,index) for index, score in enumerate(list(map(int,sys.stdin.readline().split())))) for _ in range(3)]
    solution()

댓글남기기