백준 | 등수 구하기

jeonghens·2025년 1월 30일

알고리즘: BOJ

목록 보기
115/125

백준 등수 구하기


[1]
랭킹 리스트에 점수가 존재하지 않는다면, 새 점수의 랭킹은 1이 된다.

[2]
반면 랭킹 리스트에 점수가 존재한다면, 새 점수의 랭킹을 찾아야 한다.
이때, 새 점수의 랭킹은 새 점수의 인덱스 값에 1을 더한 값이다.

여기서, 랭킹 리스트가 꽉 찬 경우(n == p)와 그렇지 않은 경우로 나누어 생각할 수 있다.

[2-1]
랭킹 리스트가 꽉 찼다면, 어떤 점수는 반드시 밀려나게 되고, 랭킹 리스트에서 제외된다.
새 점수가 내림차순 정렬된 랭킹 리스트의 최솟값보다 작거나 같다면, 새 점수는 랭킹 리스트에서 제외되므로 -1을 출력해야 한다.
그렇지 않다면, 새 점수의 인덱스에 1을 더한 값이 랭킹이 된다.

[2-2]
랭킹 리스트에 자리가 남아 있다면, 새 점수의 인덱스에 1을 더한 값이 랭킹이 된다.


import sys

n, new_point, p = map(int, sys.stdin.readline().split())

# 1. 랭킹 리스트가 존재하는 경우
if n > 0:
    ranking_list = list(map(int, sys.stdin.readline().split()))

    new_point_index = n
    for i in range(n):
        if new_point >= ranking_list[i]:
            new_point_index = i
            break

    # 1-1. 랭킹 리스트에 자리가 없는 경우
    if n == p:
        if new_point <= ranking_list[-1]:
            print(-1)
        else:
            print(new_point_index + 1)
    # 1-2. 랭킹 리스트에 자리가 있는 경우
    else:
        print(new_point_index + 1)
# 2. 랭킹 리스트가 존재하지 않는 경우
else:
    print(1)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글