알고리즘/백준

[백준/Python] 1205번: 등수 구하기

이우열 2023. 1. 27. 21:06
728x90

https://www.acmicpc.net/problem/1205

 

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net



문제 분석

비오름차순으로 저장되어 있는 점수들 사이에 태수의 새로운 점수를 끼워넣는 문제.

 

P가 주어지면 P는 랭킹 리스트의 길이이며,

새로운 점수가 점수 리스트에 들어간 뒤 새로운 점수의 앞에 점수가 P개 이상일 경우 -1을 출력한다.

새로운 점수가 리스트에 들어갈 때 같은 점수가 있다면 같은 점수의 맨 뒤에 들어가게 된다.

또한, N이 0보다 클 경우만 점수 리스트를 입력받는다.

 

if n > 0:
	...
else:
    ...

n을 기준으로 분기가 필요하다.

 

새로운 점수를 넣을 때 큰 점수와 같은 점수의 뒤에 와야 하기 때문에 랭킹을 계속 늘려주고 작을 경우에 종료하면 된다.

하지만 랭킹은 같은 점수일 경우 증가하지 않아야 하기 때문에 클 경우에만 랭킹을 늘려주는 과정을 거친다.

for i in range(n):
    if new_point < score[i]:
        rank += 1
    elif new_point > score[i]:
        break

 

P를 판단해주어야 한다. 반복문을 돌 때 만약 인덱스가 P - 1이라면 작은 점수를 만나지 못해 break 문에 걸리지 않았고,

최대 랭킹 길이인 P개가 이미 존재하기 때문에 -1을 출력해야 한다.

for i in range(n):
    ...

    if i == p - 1:
        rank = -1

코드

더보기
n, new_point, p = map(int, input().split())

if n > 0:
    score = list(map(int, input().split()))

    rank = 1
    for i in range(n):
        if new_point < score[i]:
            rank += 1
        elif new_point > score[i]:
            break

        if i == p - 1:
            rank = -1

    print(rank)
else:
    print(1)
728x90