본문 바로가기

성우리뷰

[softeer] 성적평가

import sys
n = int(input())
# arr = [list(map(int, input().split())) for _ in range(3)]

arr = []
value = [] # 총점수 계산
for i in range(3):
    tmplst = list(map(int, input().split()))
    tmp = []
    tmpval = [0] * n
    for j in range(len(tmplst)):
        tmp.append((tmplst[j], j))
        tmpval[j] += tmplst[j]
    arr.append(tmp)

totalval = []
for i in range(n):
    totalval.append([0, i])

# pair을 만들고, 정렬시키자.
prize = [1] * n
for i in range(3):  # 총 3번의 대회 동안
    arr[i].sort(key = lambda x : x[0], reverse = True)
    rank = 1
    curnum = arr[i][0][0]
    totalval[arr[i][0][1]][0] += arr[i][0][0]
    
    for j in range(1, n):
        if curnum == arr[i][j][0]: # 점수가 같다면, 같은 등수 줘야됨.
            prize[arr[i][j][1]] = rank
        else :
            rank = j + 1
            prize[arr[i][j][1]] = rank
            curnum = arr[i][j][0]
        totalval[arr[i][j][1]][0] += arr[i][j][0]
    print(*prize)
    prize = [1] * n


totalval.sort(key = lambda x : x[0], reverse = True)
rank = 1
curnum = totalval[0][0]
for j in range(1, n):
    if curnum == totalval[j][0]: # 점수가 같다면, 같은 등수 줘야됨.
        prize[totalval[j][1]] = rank
    else :
        rank = j + 1
        prize[totalval[j][1]] = rank
        curnum = totalval[j][0]
print(*prize)




# prize = [1] * n # 등수 계산
# for i in range(3):  # 총 3번의 대회 동안
#     for j in range(n) : # 총 n명의 사람에 대해
#         for k in range(j + 1, n) : # j부터 n까지
#             if arr[i][j] > arr[i][k] : 
#                 prize[k] += 1
#             elif arr[i][j] < arr[i][k] :
#                 prize[j] += 1
#         value[j] += arr[i][j]
#     print(*prize)
#     prize = [1] * n
    
# for j in range(n) : # 총 n명의 사람에 대해
#     for k in range(j + 1, n) : # j부터 n까지
#         if value[j] > value[k] : 
#             prize[k] += 1
#         elif value[j] < value[k] :
#             prize[j] += 1
# print(*prize)

아래의 주석처리된 것은 n^2이기에, 시간초과가 뜬다

위는 nlogn이기에 시간초과가 뜨지 않는다.

 

pair을 만든 다음, 정렬시켰다.

점수가 같은 경우엔 같은 점수를 줘야 하기에, curnum을 두어 이전 성적 정보를 유지할 수 있도록 했다.

lst = list(map(int, input().split()))

을 알아둬야 겠다. 잊어버렸기 때문.

'성우리뷰' 카테고리의 다른 글

[softeer] 업무처리  (0) 2023.04.10
[프로그래머스] 둘만의 암호  (0) 2023.04.08
[Softeer] 금고 관리  (0) 2023.03.27
현대 이미지 프로세싱  (0) 2022.03.22
현대 좌석관리  (0) 2022.03.10