
알고리즘 자체는 문제에서 준거나 마찬가지였다.
참가한 사람의 등수는 본인의 점수보다 높은 사람의 수에서 1을 더하면 된다는 걸 직접 알려주셨네요 ..
나는 사람을 각각 돌면서 filter를 걸어줬는데 시간 초과 늪에 걸렸다 ...
그래서 정렬을 사용하기로 !
3개의 대회에서 입력받은 점수들을 정렬하고, check_rank를 이용해서 딕셔너리로 key는 점수, value는 등수로 만들어줬다.
그리고 각 점수를 돌면서 점수에 맞게 등수를 저장해주고 출력해주면 된다 !
import sys
N = int(input())
scores = [list(map(int, sys.stdin.readline().split())) for _ in range(3)]
total_scores = [0] * N
for score in scores:
ranks = ''
for i in range(len(score)):
up_scores = list(filter(lambda x: x > score[i], score))
ranks += str(len(up_scores) + 1) + ' '
total_scores[i] += score[i]
print(ranks)
for score in total_scores:
print(len(list(filter(lambda x: x > score, total_scores)))+1, end = ' ')
import sys
N = int(input())
scores = [list(map(int, sys.stdin.readline().split())) for _ in range(3)]
total_scores = [0] * N
def check_rank(sorted):
rank = {}
r = 1
for s in sorted:
if s not in rank:
rank[s] = r
r += 1
return rank
for score in scores:
result = []
sort_scores = sorted(score, reverse = True)
rank_dict = check_rank(sort_scores)
for i in range(N):
result.append(rank_dict[score[i]])
total_scores[i] += score[i]
print(*result)
total_rank = []
sort_total_scores = sorted(total_scores, reverse=True)
total_rank_dict = check_rank(sort_total_scores)
for score in total_scores:
total_rank.append(total_rank_dict[score])
print(*total_rank)
