알고리즘/백준

[백준 / Python] 1205번 등수 구하기 | 초코더

cloud_nice 2020. 1. 16. 19:36

https://www.acmicpc.net/problem/1205

 

1205번: 등수 구하기

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

www.acmicpc.net

접근법

새로 들어온 점수를 append()함수로 추가하고 정렬해줍니다.

그리고 새로 들어온 점수의 등수를 index()함수를 이용해 구해줍니다.

 

그런데 두번째 입출력 예와 같이 새로들어온 점수가 마지막 점수와 같으면서, N과 P가 같으면

-1을 반환해야 합니다. 예를 들어 다음과 같은 입력이 들어오면

 

5 1 5

5 4 3 2 1

 

새로들어온점수는(=1) 마지막 점수인 '1'과 같습니다. 그리고 N=5와 P=5 또한 같으므로 1은 5등을 출력하는 것이 아닌 랭킹의 범위를 넘었다고 간주하여 '-1'을 반환합니다.

 

나의 풀이

import sys

n,yj,p=input().split()
nums=list(map(int,sys.stdin.readline().split()))
over=0

if int(p)==0: #랭킹 길이가 0이면 -1반환
    print(-1)
elif int(n)==0: #입력 점수가 0개면 1등반환
    print(1)
else:
    nums.append(int(yj)) #yj의 점수 추가
    nums.sort(reverse=True) #정렬
    if nums.index(int(yj))+1 > int(p): #yj의 등수가 랭킹 범위를 넘으면 
        print(-1) #-1반환
    else:
        if int(yj) == nums[-1] and int(n)==int(p):#yj점수==마지막점수 AND n==p
            print(-1) #-1 반환
        else:
            print(nums.index(int(yj))+1)