등수 구하기
문제
태수가 즐겨하는 디제이맥스 게임은 각각의 노래마다 랭킹 리스트가 있다. 이것은 매번 게임할 때 마다 얻는 점수가 비오름차순으로 저장되어 있는 것이다.
이 랭킹 리스트의 등수는 보통 위에서부터 몇 번째 있는 점수인지로 결정한다. 하지만, 같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다.
예를 들어 랭킹 리스트가 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보다 큰 경우에만 주어진다.
출력
첫째 줄에 문제의 정답을 출력한다.
예제 입력 1
3 90 10
100 90 80
예제 출력 1
2
예제 입력 2
10 1 10
10 9 8 7 6 5 4 3 2 1
예제 출력 2
-1
예제 입력 3
10 1 10
10 9 8 7 6 5 4 3 3 0
예제 출력 3
10
예제 입력 4
0 0 50
예제 출력 4
1
1. 문제 상황
이 문제는 한 줄로 요약하면:
"새로운 점수가 기존 랭킹 리스트에 들어가면 몇 등인지 구하는 문제"
입력으로 주어지는 것:
| N | 현재 랭킹에 올라가 있는 사람 수 |
| S | 태수의 새로운 점수 |
| P | 랭킹 리스트에 올라갈 수 있는 최대 인원 |
그리고 현재 랭킹 점수들이 내림차순으로 주어진다.
2. 규칙
이 문제에서 중요한 건 점수 계산이 아니라 등수 규칙이다.
✔ 규칙 1: 순위 기준
등수 = 자기보다 높은 점수 개수 + 1
예:
100, 90, 90, 80
→ 등수: 1, 2, 2, 4
같은 점수는 같은 등수.
✔ 규칙 2: 리스트가 꽉 찼을 때
이 조건 때문에 문제 난이도가 올라간다.
N == P 인 경우 (랭킹이 꽉 찬 상태)
새 점수 > 마지막 점수 → 들어갈 수 있음
새 점수 <= 마지막 점수 → 못 들어감 (-1)
이 조건 중요!!
3. 흐름
Step 1 — 랭킹이 비어있는 경우
N ==0
아무도 없으므로 무조건 1등.
Step 2 — 들어갈 수 있는지 확인
랭킹이 꽉 찼다면:
if N == P and S <= arr[-1]:
print(-1)
→ 여기서 탈락하면 더 볼 필요 없음
Step 3 — 등수 계산
이제 들어갈 수 있다면 순위 계산.
처음부터 돌면서:
rank =1
for scorein arr:
if score > S:
rank +=1
else:
break
자기보다 큰 점수 수를 세는 것과 같다.
4. 코드
import sys
input = sys.stdin.readline
N, S, P =map(int,input().split())
if N >0:
arr =list(map(int,input().split()))
else:
arr = []
# 1. 랭킹이 비어있으면
if N ==0:
print(1)
exit()
# 2. 랭킹이 꽉 찼고 못 들어가는 경우
if N == Pand arr[-1] >= S:
print(-1)
exit()
# 3. 등수 계산
rank =1
for scorein arr:
if score > S:
rank +=1
else:
break
print(rank)
이 문제는 DP도, 정렬도 아닌 조건 분기를 설계할 줄 아는 능력을 물어보는 문제였다.
'백준' 카테고리의 다른 글
| [백준] 7490번 - 0만들기 (0) | 2026.02.04 |
|---|---|
| [백준] 2531번 - 회전초밥 (0) | 2026.02.04 |
| [백준] 15989번 - 1, 2, 3 더하기 4 문제 풀이 (1) | 2026.02.02 |
| [백준] 9665번 - 돌게임 (0) | 2026.02.02 |
| [백준] 9665번 - 지름길 문제 (0) | 2026.02.02 |