[BOJ] 1205 / 등수 구하기 / Python

hun_dev·2022년 10월 15일
0

BOJ의 1205번 문제 등수 구하기를 Python으로 해결한 문제입니다.
문제는 해당 링크에서 확인할 수 있습니다.

문제

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

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

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

출력

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

예제 입력 및 출력

해당 문제의 예제 입력 및 출력 중 일부입니다.

풀이 코드

import sys

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

if n:
  score_list = list(map(int, sys.stdin.readline().split()))
  score_list.append(new_score)
  score_list.sort(reverse=True)
  
  if p >= (score_list.index(new_score) + 1):
    if n == p and new_score <= score_list[-1]:
      print(-1)
    else:
      print(score_list.index(new_score) + 1)
  else:
    print(-1)
else:
  print(1)

풀이 방법

먼저 예제 입력의 첫 줄인 N, 태수의 새로운 점수, P를 입력받습니다.
입력받은 후, N이 0인지 아닌지의 여부를 판단합니다. 0이라면 현재 랭킹 리스트에 등록된 점수가 하나도 없다는 의미이므로 태수는 1등입니다. 따라서 1을 출력합니다.

N이 0이 아니라면 랭킹 리스트에 등록된 점수를 리스트로 입력받고 태수의 새로운 점수를 추가합니다. 그리고 리스트를 내림차순 정렬합니다.

내림차순 정렬이 완료된 리스트에 대하여 태수의 등수와 P를 비교합니다. P가 태수의 등수보다 작다면 태수는 랭킹 리스트에 점수를 등록할 수 없습니다. 따라서 -1을 출력합니다.

P가 태수의 등수보다 크거나 같다면 태수는 랭킹 리스트에 점수를 등록할 수 있습니다. 이제 문제 마지막줄에 주어진 만약, 랭킹 리스트가 꽉 차있을 때, 새 점수가 이전 점수보다 더 좋을 때만 점수가 바뀐다라는 조건을 만족되게끔 코드를 작성해야 합니다.

랭킹 리스트가 꽉 차있다는 것은 N과 P가 같다는 것이기 때문에, N과 P가 같지 않고 태수의 새로운 점수가 이전 점수보다 더 좋다면 태수의 등수를 출력하고 그렇지 않다면 -1을 출력합니다.

profile
좋아하는 것이 잘하는 것이 될 때까지

0개의 댓글