시간 제한: 1초, 메모리 제한 128MB
실버 4
예선 참가자 N명
M개의 장르
본선에는 K명이 나감, 각 참가자는 한 개의 장르만 부를 수 있다.
각 참가별 장르 능력이 주어짐
첫째줄에 N,M,K가 주어짐
1≤ M ≤ 100, 1≤ K ≤ N ≤ 100
두번째 줄에는 N개의 (i,s) 쌍이 주어짐
i: 참가자의 번호, s: 참가자의 장르에 대한 능력
능력이 높을수록 앞쪽에 위치
3 2 2
2 3.0 1 0.2 3 0.1
3 1.0 2 0.5 1 0.2
본선 각 참가자의 능력의 합을 소수점 첫째자리까지 나타냄
4.0
장르 리스트를 만들고 참가자와 능력치를 딕셔너리로 입력함
각 사람의 최대 능력치를 비교해서 가장 큰 K명을 본선으로 올려보낸다.
별개의 6개의 숫자들을 딕셔너리로 묶는 방법을 모르겠다.
일단 모두 리스트로 받고 딕셔너리를 만들어봐야겠다.
딕셔너리의 key를 참가자로, value를 능력치로 잡고
각 참가자들마다 최고의 능력치를 genre_dict에 저장한다.
최고 능력치를 만났을 때 dict를 갱신해준다.
상위 K개만 뽑아내서 그 능력치를 모두 더한다.
소수점 출력으로 바꿔본다.
print(f'{score:.1f}')
정답!
N, M, K = map(int,input().split())
genre_dict = {}
for idx in range(M):
temp = list(input().split())
if idx == 0:
for cnt in range(0,len(temp),2):
genre_dict[temp[cnt]] = float(temp[cnt+1])
else:
for cnt in range(0,len(temp),2):
if genre_dict[temp[cnt]] < float(temp[cnt+1]):
genre_dict[temp[cnt]] = float(temp[cnt+1])
#print("Genre_dict:",genre_dict)
#print("Best ability:",genre_dict)
score = sum(sorted(list(genre_dict.values()),reverse=True)[:K])
print(f'{score:.1f}')
3 2 2
2 3.0 1 0.2 3 0.1
3 1.0 2 0.5 1 0.2
Best ability: {'2': 3.0, '1': 0.2, '3': 1.0}
4.0
4 4 3
4 5.0 2 4.0 3 2.0 1 1.0
2 2.0 3 1.0 1 0.5 4 0.3
4 6.0 3 5.0 2 2.0 1 0.0
1 4.0 2 3.0 4 0.6 3 0.3
Best ability: {'4': 6.0, '2': 4.0, '3': 5.0, '1': 4.0}
15.0