[프로그래머스][파이썬] 등수 매기기 - 정렬 (Level 0)

뻥튀기아이스크림·2025년 4월 4일
1
post-thumbnail

◽ 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120882

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

def solution(score):
    avg = [sum(i) / 2 for i in score]
    s_avg = sorted(avg, reverse = True)

    answer = []
    for i in avg:
        answer.append(s_avg.index(i) + 1)
    
    return answer
  • avg 배열에 평균을 담고, s_avg 배열에 내림차순 정렬했다.
  • 제일 앞에 위치한 요소의 인덱스를 반환했다.

◽ 다른 사람 풀이

def solution(score):
    rank = sorted([sum(s) / 2 for s in score], reverse = True)
    
    rankDict = {}
    for i, r in enumerate(rank):
        if r not in rankDict.keys():
            rankDict[r] = i + 1
            
    return [rankDict[sum(s) / 2] for s in score]
  • rank 배열에 평균값 내림차순 정렬하여 담고, 딕셔너리로 해결했다.
  • rank 배열의 인덱스와 값을 추출하여 딕셔너리에 해당 값이 없으면 해당 키 값에 1을 더하며 해당 평균 점수의 등수를 매긴다.
  • 각 학생의 평균 점수에 대한 등수 리스트를 반환한다.

◽ 더 나아가기

  • 이해하기에는 리스트로만 풀이한 방식이 좋아보이지만 시간복잡도가 O(n^2) 로 큰 입력에 대해 비효율적일 수 있다.
  • 딕셔너리를 활용한 풀이는 평균 점수 계산에 O(n), 정렬에 O(nlogn) 으로 총 O(nlogn) 의 복잡도로 더 효율적인 코드이다.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글