입력 받은 점수를 기준으로 최대 힙을 구현해준다.
하나씩 빼면 그게 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)))