- 문제 : 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)
엄청나게 틀렸던 기록,,
'백준 > 구현' 카테고리의 다른 글
[구현/백준] 20006번 : 랭킹전 대기열 (0) | 2023.09.08 |
---|---|
[구현/백준] 1138번 : 한 줄로 서기 (0) | 2023.09.06 |
[구현/백준] 2952번 : NBA 농구 (0) | 2023.09.03 |
[구현/백준] 9017번 : 크로스 컨트리 (0) | 2023.08.21 |
[구현/백준] 11723번 : 집합 (0) | 2023.08.06 |