[Softeer] HSAT 5회 정기 코딩 인증평가 기출 | 성적 평가

Gaanii·2024년 10월 25일
0

Problem Solving

목록 보기
75/210
post-thumbnail

문제링크


HSAT 5회 정기 코딩 인증평가 기출 | 성적 평가



풀이과정


알고리즘 자체는 문제에서 준거나 마찬가지였다.

참가한 사람의 등수는 본인의 점수보다 높은 사람의 수에서 1을 더하면 된다는 걸 직접 알려주셨네요 ..

나는 사람을 각각 돌면서 filter를 걸어줬는데 시간 초과 늪에 걸렸다 ...


그래서 정렬을 사용하기로 !
3개의 대회에서 입력받은 점수들을 정렬하고, check_rank를 이용해서 딕셔너리로 key는 점수, value는 등수로 만들어줬다.

그리고 각 점수를 돌면서 점수에 맞게 등수를 저장해주고 출력해주면 된다 !


코드


  1. 부분 통과(시간 초과)
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 = ' ')

  1. 통과 ! (정렬 사용)
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)


결과


정답

0개의 댓글