[Softeer] 성적 평가

최동혁·2023년 2월 1일
0

Softeer

목록 보기
8/10

풀이 방법

입력 받은 점수를 기준으로 최대 힙을 구현해준다.
하나씩 빼면 그게 heap안의 최대 값인데, 바로 다음 최대값과 같은지 비교한다.
같다면 등수는 같게 고정시키고, 다르다면 다른 등수를 부여한다.
등수 부여 로직은 변수를 두 개 이용하였다.
equal_rank와 i를 이용했는데, i는 사람 수 만큼 계속 올라간다.
equal_rank는 같은 점수가 나오면 고정시키고, 다른 등수가 나오면 i 값을 가져와서 넣어준다.

풀이 코드

import sys
import heapq

n = int(sys.stdin.readline())

res = [0 for _ in range(n)]


for _ in range(3):
    ls = list(map(int, sys.stdin.readline().split()))
    heap = []
    rank = [0 for _ in range(n)]
    for i in range(n):
        res[i] += ls[i]
        heapq.heappush(heap, (-ls[i], i))
    
    i = 1
    equal_rank = 1
    for _ in range(n):
        score, index = heapq.heappop(heap)
        score = - score

        if heap:
            if heap[0][0] == - score:
                rank[index] = equal_rank
                i += 1
            else:
                rank[index] = equal_rank
                i += 1
                equal_rank = i
        else:
            rank[index] = equal_rank
    print(' '.join(map(str, rank)))

heap = []
for i in range(n):
    heapq.heappush(heap, (- res[i], i))

i = 1
rank = [0 for _ in range(n)]
equal_rank = 1

for _ in range(n):
    tot, ind = heapq.heappop(heap)
    tot = - tot
    if heap:
        if heap[0][0] == - tot:
            rank[ind] = equal_rank
            i += 1
        else:
            rank[ind] = equal_rank
            i += 1
            equal_rank = i
    else:
        rank[ind] = equal_rank
        
print(' '.join(map(str, rank)))
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글