[알고리즘] 순위

Jimin_Note·2025년 8월 28일
0
post-thumbnail

📌 순위(Ranking)

1. 순위란?

  • 값의 대소 비교를 통해 순서를 정하는 것
  • 중첩 반복문을 사용하면 간단히 구현 가능 (O(n²))
  • 실제 데이터가 많아지면 정렬 기반 순위 매기기 방식이 더 효율적

점수: [98, 67, 99, 52, 89, 78, 57, 65, 50, 74, 58, 71, 68, 96, 86, 85, 93, 94, 66, 97]

-> 이 점수들을 내림차순 정렬하면 가장 큰 값이 1등, 그 다음이 2등 …


2. 순위 구하기 예제

scores = [98, 67, 99, 52, 89, 78, 57, 65, 50, 74,
          58, 71, 68, 96, 86, 85, 93, 94, 66, 97]

# 각 점수에 대한 순위 계산
ranks = [1] * len(scores)

for i in range(len(scores)):
    for j in range(len(scores)):
        if scores[i] < scores[j]:   # 나보다 높은 점수가 있으면
            ranks[i] += 1           # 내 순위는 1씩 내려감

print("점수:", scores)
print("순위:", ranks)

점수: [98, 67, 99, 52, 89, 78, 57, 65, 50, 74, 58, 71, 68, 96, 86, 85, 93, 94, 66, 97]
순위: [2, 13, 1, 19, 6, 9, 17, 15, 20, 10, 16, 11, 12, 3, 7, 8, 5, 4, 14, 3]

3. 실습

📌 문제 1

학급 학생 20명의 중간고사와 기말고사 성적을 난수로 생성하고,
각각의 순위를 구한 뒤 순위 변화(편차)를 출력해보자.

import random

# 1) 난수로 성적 생성 (1~100 사이 점수, 20명)
midterm = [random.randint(1, 100) for _ in range(20)]
final = [random.randint(1, 100) for _ in range(20)]

# 2) 순위 계산 함수
def get_ranks(scores):
    ranks = [1] * len(scores)
    for i in range(len(scores)):
        for j in range(len(scores)):
            if scores[i] < scores[j]:
                ranks[i] += 1
    return ranks

midterm_ranks = get_ranks(midterm)
final_ranks = get_ranks(final)

# 3) 순위 변화(편차) 계산
diff = [midterm_ranks[i] - final_ranks[i] for i in range(20)]

# 4) 출력
print("중간고사 점수:", midterm)
print("기말고사 점수:", final)
print("중간고사 순위:", midterm_ranks)
print("기말고사 순위:", final_ranks)
print("순위 변화(편차):", diff)

중간고사 점수: [35, 87, 55, 91, 60, ...]
기말고사 점수: [70, 45, 92, 66, 51, ...]
중간고사 순위: [18, 5, 13, 2, 11, ...]
기말고사 순위: [6, 15, 1, 7, 14, ...]
순위 변화(편차): [12, -10, 12, -5, -3, ...]

profile
Hello. I'm jimin:)

0개의 댓글