대기업 코테 유형

(백준/파이썬) [Silver IV] 등수 구하기 - 1205

난쟁이 개발자 2024. 9. 5. 21:55
반응형

[Silver IV] 등수 구하기 - 1205

문제 링크

성능 요약

메모리: 108080 KB, 시간: 88 ms

분류

구현

제출 일자

2024년 8월 16일 20:47:58

문제 설명

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

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

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

출력

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

 

풀이

비오름차순 = 내림차순 일까... 뭐가 틀린건지 잘 모르겠어서 다른 분의 풀이를 참고하였다.

참가자가 없는 경우와 있는 경우를 분리해서 알아보는 것이 중요하다고 생각된다. 

더보기
# 입력으로 N(참가자 수), score(새로운 참가자의 점수), P(랭킹 리스트의 최대 길이)를 받음
N, new_score, P = map(int, input().split())

if N == 0:
    # 참가자가 없는 경우, 새로운 참가자는 1등
    print(1)
else:
    # 현재 참가자들의 점수 리스트를 입력받음
    board = list(map(int, input().split()))

    if N == P and board[-1] >= new_score:
        # 랭킹 리스트가 꽉 찼고, 새 참가자의 점수가 마지막 순위 점수보다 낮거나 같으면 랭킹에 들어갈 수 없음
        print(-1)
    else:
        # 새 참가자의 순위를 찾음
        rank = N + 1  # 초기 순위를 참가자 수 + 1로 설정
        for i in range(N):
            if board[i] <= new_score:
                # 새 참가자보다 점수가 낮거나 같은 참가자를 찾으면, 그 위치가 새 참가자의 순위
                rank = i + 1
                break
        print(rank)
반응형