[백준/Python] 1205 - 등수 구하기

고운·2024년 5월 15일

알고리즘

목록 보기
90/94

문제

태수가 즐겨하는 디제이맥스 게임은 각각의 노래마다 랭킹 리스트가 있다. 이것은 매번 게임할 때 마다 얻는 점수가 비오름차순으로 저장되어 있는 것이다.

이 랭킹 리스트의 등수는 보통 위에서부터 몇 번째 있는 점수인지로 결정한다. 하지만, 같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다.

예를 들어 랭킹 리스트가 100, 90, 90, 80일 때 각각의 등수는 1, 2, 2, 4등이 된다

랭킹 리스트에 올라 갈 수 있는 점수의 개수 P가 주어진다. 그리고 리스트에 있는 점수 N개가 비오름차순으로 주어지고, 태수의 새로운 점수가 주어진다. 이때, 태수의 새로운 점수가 랭킹 리스트에서 몇 등 하는지 구하는 프로그램을 작성하시오. 만약 점수가 랭킹 리스트에 올라갈 수 없을 정도로 낮다면 -1을 출력한다.

만약, 랭킹 리스트가 꽉 차있을 때, 새 점수가 이전 점수보다 더 좋을 때만 점수가 바뀐다.

입력

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이다. 둘째 줄에는 현재 랭킹 리스트에 있는 점수가 비오름차순으로 주어진다. 둘째 줄은 N이 0보다 큰 경우에만 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.


풀이
태수의 점수가 어디에 위치할지를 파악하고, 그 위치를 pos변수에 저장한다
중요한 점은 태수의 위치는 동점이거나 더 큰 점수의 바로 뒤이다 끝까지 for를 다 돌고나면 태수의 위치가 정해지게 되는데
태수의 위치가 p보다 크거나 같다면 p개의 점수들에 포함될 수 없으므로 -1을 출력한다
만약 작다면, 태수의 점수를 arr에 추가하고 정렬한 후에 p개만큼 슬라이싱한다
동점이 있는 경우에는 동점들의 등수 중 가장 작은 값이 태수의 등수가 된다
이후, index 함수를 이용해 구한 인덱스에 +1을 한 값이 태수의 위치이다
index는 가장 처음 만나는 수의 인덱스를 반환한다는 점을 이용한다

코드

import sys

n, score, p = map(int, sys.stdin.readline().split())
if n != 0:
    arr = list(map(int, sys.stdin.readline().split()))
else:
    arr = []

pos = 0 
for i in range(len(arr)):
    if arr[i] >= score:
        pos = i+1

if p <= pos:
    print(-1)
else:
    arr.append(score)
    arr.sort(reverse=True)
    arr = arr[:p]
    print(arr.index(score)+1)
profile
무럭무럭 성장하는 개린이 공부 공간

0개의 댓글