- 문제 : https://www.acmicpc.net/problem/1205

 

1시간의 시도 끝에 풀었던 문제;; 실버4인데 왜이렇게 어려운지

 

문제 이해 

- 주어진 노래 점수 리스트(n)에서 새로운 점수(score)를 추가하려고 하는데, 배열의 길이는 최대 p까지만 가능하다. 그래서 len(n) <= p 인 경우에만 연산을 할 수 있다.

- 만약 len(n) < p 라면 그냥 새 점수를 추가하면 되고, len(n) == p라면 다음 조건을 따라야 한다. 

    - n에서 가장 적은 점수를 pop하고, 새 점수(score)를 추가 해야한다. 

    - 단, 새 점수가 가장 적은 점수 초과여야 한다. 아니라면 pop도 못한다. 

- 만약 새 점수를 n에 추가할 수 있는 상황이라면, 각 점수를 정렬한 뒤 새로 추가한 점수인 score의 등수를 구해서 출력하면 된다. 

    - 등수 구하는 것도 주의해야하는데, 같은 점수가 있을 때 해당 점수의 등수는 같은 점수의 가장 마지막 순서 번호가 등수가 된다. 

      예시로 [100, 90, 90, 80] 인 경우 각 점수의 등수는 1, 2, 2, 4가 된다. 

    - 이는 딕셔너리를 이용하면 되는데, 딕셔너리를 점수별로 정렬한 뒤 각 점수의 개수를 세면 된다.

 

 

정답 풀이 

from collections import Counter
import sys
input = sys.stdin.readline #이거 해줘야 EOFError 발생 안함

n, score, p = map(int, input().split())

scores = list(map(int, input().split()))
scores.sort(reverse = True)

answer = -1
flag = True
if n <= p:
    if n < p:
        scores.append(score)
    elif n == p :
        if score > scores[-1]:
            scores.pop()
            scores.append(score)
        else:
            flag = False
    
    if flag : 
        temp = Counter(scores)
        result = sorted(temp.items(), key = lambda x : x[0], reverse = True)
        rank = 1
        for x, y in result:
            if x == score:
                answer = rank
                break
            rank += y
            
print(answer)

 

엄청나게 틀렸던 기록,,

+ Recent posts