코딩 테스트/백준
[Python] 백준 1205 등수 구하기
위시리
2025. 1. 24. 17:54


문제 분석
- 노래마다 랭킹 리스트가 있음
- 매번 게임을 할 때마다 얻는 점수가 비오름차순으로 저장
- 랭킹 리스트의 등수는 위에서 부터 차례로, 점수가 같으면 그러한 점수의 등수 중 가장 작은 등수
- P : 랭킹 리스트에 올라갈 수 있는 점수의 개수
- n : 리스트에 있는 점수의 개수 - 비오름차순으로 주어짐
- 태수의 새로운 점수가 랭킹 리스트에서 몇 등 하는지 구하는 프로그램을 작성하라
- 만약 점수가 랭킹 리스트에 올라갈 수 없을 정도로 낮다면 -1 출력
코드 설계
- 새로운 점수를 입력하려고 하는데
- 만약 랭킹 리스트가 꽉 찼다면 : 내 점수가 랭킹에 있는 점수 중 가장 작은 값보다 커야만 입력
- 랭킹 리스트가 다 안찼다면 : 그냥 입력
- 나의 등수는 동점이 있어도 맨 앞의 인덱스를 출력하니까 현재 인덱스 + 1 (0부터 시작)
정답 코드
import sys
input = sys.stdin.readline
n, s, p = map(int, input().split())
# n : 현재 랭킹에 있는 점수의 개수
# p : 랭킹에 등재될 수 있는 총 점수의 개수
# s : 내 노래 점수
if n == 0 :
print(1)
exit(0)
scores = list(map(int,input().split())) # len(scores) == n
# 랭킹 리스트가 다 찼다면
if len(scores) >= p :
if min(scores) >= s :
print(-1)
exit(0)
else :
del scores[scores.index(min(scores))]
scores.append(s)
scores = sorted(scores, reverse=True)
# 랭킹 리스트에서 나의 랭킹 찾기 -> 동점자가 있어도 어차피 맨 앞의 인덱스를 출력하니까..
print(scores.index(s)+1)
다른 사람 코드 1
- n == 0 인 경우와 n>0 인 경우
- n == 0이면 10 <= p <= 50 이므로 랭킹은 1이 됨
- n > 0인 경우에는
- n == p 이면서 랭킹의 가장 작은 값보다 작으면 -1
- 그 외의 경우에는 랭킹 점수를 for문으로 돌면서 랭킹 점수가 새로운 점수보다 작거나 같으면 그 등수가 새로운 점수의 등수
- 없다면 n+1
n, new, p = map(int, input().split())
if n:
scores = list(map(int, input().split()))
scores.append(new)
scores.sort(reverse=True)
idx = scores.index(new) +1
if idx > p :
print(-1)
else :
if n == p and new == scores[-1] :
print(-1)
else :
print(idx)
else :
print(1)