매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 백준 1205 등수구하기 -Python 본문

알고리즘 문제풀이/백준

[Seop's의 코드풀이] 백준 1205 등수구하기 -Python

섭섭군 2020. 4. 28. 13:24
반응형

이번에 풀어 본 문제는 백준 1205번 등수구하기 문제입니다.

 

먼저 문제는 다음과 같습니다.

 

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

 

1205번: 등수 구하기

첫째 줄에 N, 송유진의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이다. 둘째 줄에는 현재 랭킹 리스트에 있는 점수가 비오름차순으로 주어진다. 둘째 줄은 N이 0보다 큰 경우에만 주어진다.

www.acmicpc.net

 

문제를 읽어보면 제목 그대로 등수를 구하는 문제입니다.

하지만 그냥 구하는 것이 아니라 조건이 몇가지 있습니다.

 

1. 만약 랭킹표에 유진이의 점수와 같은 것이 있다면 등수는 같지만 가장 마지막에 랭크된다.

예를들어 유진이의 점수가 80 랭킹표에 있는 점수가 [100, 80, 80, 70] 이라면

[100, 80, 80, 80(유진이 점수), 70]

처럼 되게 됩니다. 즉 등수는 2등이지만 순번 4번째인 것이죠

 

2. 랭킹표에 올라 갈수 있는 순번 p 가 주어지고 p 순번 안에 들어가지 못했을 경우 -1 을 출력한다.

 

위 두가지 조건을 고려해 가면서 문제를 풀면 좋을것 같습니다.

 

저는 본 문제를 다음과 같은 순서로 풀었습니다.

 

 

등수와 순번이 필요하기 때문에

answer = [ 등수, 순번] 을 저장 할 수 있도로 진행하였고

유진이의 점수와 동일한 것이 있는지 확인한후 작업을 진행하였습니다.

 

부족한점 댓글이나 쪽지로 피드백 해주시면 감사하겠습니다.

전체 코드는 다음과 같습니다.

 

import sys
input = sys.stdin.readline

N, s, p = map(int, input().split(" "))
if N == 0 :
    # 랭킹 리스트가 비어있는경우 
    score_list = []
else :
    score_list = list(map(int, input().split(" ")))

answer = [0, 0]
#  answer[0] 은 등수, answer[1] 은 순번이다.
if s in score_list :
    temp = score_list.index(s)
    answer[1] = temp + 1
    cnt = 0
    for i in score_list[temp : ] :
        if i == s :
            cnt += 1 
        else : 
            break
    answer[0] = temp + cnt + 1
else :
    score_list.append(s)
    score_list = sorted(score_list, reverse= True)
    answer[0] = score_list.index(s) + 1
    answer[1] = score_list.index(s) + 1

if answer[0] <= p :
    print(answer[1])
else :
    print(-1)

        
반응형
Comments