https://www.acmicpc.net/problem/1205
Problem
- 태수가 즐겨하는 디제이맥스 게임은 각각의 노래마다 랭킹 리스트가 있다. 이것은 매번 게임할 때 마다 얻는 점수가 비오름차순으로 저장되어 있는 것이다.
- 랭킹 리스트에 올라 갈 수 있는 점수의 개수 P가 주어진다. 그리고 리스트에 있는 점수 N개가 비오름차순으로 주어지고, 태수의 새로운 점수가 주어진다. 이때, 태수의 새로운 점수가 랭킹 리스트에서 몇 등 하는지 구하는 프로그램을 작성하시오. 만약 점수가 랭킹 리스트에 올라갈 수 없을 정도로 낮다면 -1을 출력한다.
조건
- 이 랭킹 리스트의 등수는 보통 위에서부터 몇 번째 있는 점수인지로 결정한다. 하지만, 같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다.
- 예를 들어 랭킹 리스트가 100, 90, 90, 80일 때 각각의 등수는 1, 2, 2, 4등이 된다.
- 만약, 랭킹 리스트가 꽉 차있을 때, 새 점수가 이전 점수보다 더 좋을 때만 점수가 바뀐다.
SOL
DJ max나 음악게임을 해보신 분이라면, 이해하기 쉬운 순위 매기는 방식이다.
랭킹 순위가 (1~10) 까지 정해져있고, 내 점수가 그 사이에 있다면 당연히 In ranking을 해야한다.
- 랭킹 순위가 꽉차있다면
- 이때, N==P이고, score[-1]보다 , target값이 작거나 같다면, 난 Rank In을 못한다.
- 랭킹 리스트에 빈 자리가 있으면
- 만약, 랭킹 마지막 점수보다 낮다면, N+1이 내 순위이다.
- 랭킹 리스트에 내 점수 사이에있다면, index +1이 내 랭킹이다.(내림차순으로 정렬되어있기 때문)
#등수 구하기
import sys
input = sys.stdin.readline
N,target,P = map(int,input().split())
if N==0:
print(1)
else:
score=list(map(int,input().split()))
if N==P and score[-1] >=target:
print(-1)
else:
rank=N+1
for i in range(N):
if score[i]<=target:
rank =i+1
break;
print(rank)
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/2607/파이썬] 비슷한 단어 (0) | 2022.01.26 |
---|---|
[백준/2902/파이썬] KMP는 왜 KMP일까? (0) | 2022.01.25 |
[백준/13460/파이썬] 구슬 탈출 2 (0) | 2022.01.25 |
[백준/13459/파이썬] 구슬 탈출 (0) | 2022.01.25 |
[백준/1059/파이썬] 좋은 구간 (0) | 2022.01.24 |