CodingTest/Baekjoon

[baekjoon] 백준 1205번(파이썬): 등수 구하기

JunJangE 2022. 8. 10. 00:04

문제

 

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net

알고리즘

- 랭킹 리스트에 점수가 있는지 확인하고 점수가 없다면 무조건 1등이므로 1을 출력한다.

- 랭킹 리스트에 점수가 있다면 랭킹 리스트에 새로운 점수를 넣고 새로운 점수의 등수를 확인한다.

- 등수가 랭킹의 올라갈 수 있는 등수보다 크다면 -1을 출력한다.

- 랭킹 리스트의 길이와 랭킹의 올라갈 수 있는 등수의 길이가 같고 마지막 등수가 새로운 점수의 등수와 같다면 즉, 새로운 점수가 마지막 점수와 동점이라면 -1을 출력한다.

- 그게 아니라면 랭킹 리스트에 새로운 점수의 등수를 출력한다.

코드

import sys


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

# 랭킹 리스트에 점수가 있는지 확인
if n:
    m = sorted(list(map(int, sys.stdin.readline().split())) + [next_point], reverse=True) # 랭킹 리스트 + 새로운 점수
    answer = m.index(next_point) + 1  # 랭킹 리스트에 새로운 점수의 등수

    # 등수가 랭킹의 올라갈 수 있는 둥수보다 크다면 -1 출력
    if answer > p:
        print(-1)
    else:
        # 랭킹 리스트의 길이와 랭킹의 올라갈 수 있는 등수의 길이가 같고 마지막 등수가 새로운 점수의 등수와 같다면
        # 즉, 새로운 점수가 마지막 점수와 동점이라면 -1 출력
        if n == p and next_point == m[-1]:
            print(-1)

        # 위 경우가 아니라면 랭킹 리스트에 새로운 점수의 등수를 출력
        else:
            print(answer)


# 랭킹 리스트에 점수가 없다면 무조건 1등!
else:
    print(1)

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com