Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

잡동사니 블로그

[백준] 1205 - 등수 구하기 (python) 본문

Python/백준

[백준] 1205 - 등수 구하기 (python)

코딩부대찌개 2023. 3. 25. 22:09

문제

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

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

예를 들어 랭킹 리스트가 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보다 큰 경우에만 주어진다.

출력

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

예제 입력 1

3 90 10
100 90 80

예제 출력 1

2

예제 입력 2

10 1 10
10 9 8 7 6 5 4 3 2 1

예제 출력 2

-1

예제 입력 3

10 1 10
10 9 8 7 6 5 4 3 3 0

예제 출력 3

10

예제 입력 4

0 0 50

예제 출력 4

1

풀이

a, b, c = map(int,input().split())
if a != 0 :
    t=list(map(int, input().split()))
    t.append(b)
    t = sorted(t, reverse=True)
else :
    t=[]
    t.append(b)
t.append(-1)
cnt = 0 
flag = 0
for i in range(len(t)-1) :
    cnt +=1
    if t[i] == b and flag == 0:
        rank = cnt
        flag=1
    if t[i] != t[i+1] and t[i] == b :
        break
if cnt > c :
    print(-1)
else:
    print(rank)

우선 아래의 경우를 보면 N이 0일 경우에는 리스트의 입력을 아예 받지 않기 때문에 태수의 점수인 b만을 append 해주는 차이를 주었음. N이 0이 아닐 경우엔 리스트를 입력받아 태수의 점수까지 추가한 후, 리스트로 내림차순 정렬하였고, 그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이기 때문에 0보다 작은 정수인 -1을 append하여 끝을 쉽게 구분하게 하였음.

리스트를 반복하여 태수의 점수가 나왔을 경우엔 rank 변수에 순위가 기록되며 만약 태수의 점수 및 같은 점수들로 인해 랭킹리스트에 꽉 차있으면 cnt  > c : 라는 부분을 통해 -1을 출력하였음

아닐경우엔 순위인 rank를 출력함

 

 

 

흔한 구현문제인듯 합니다.