백준 2865번 나는 위대한 슈퍼스타K

이호영·2021년 11월 12일
0

백준

목록 보기
3/3

2865번: 나는 위대한 슈퍼스타K

시간 제한: 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

ver.1

장르 리스트를 만들고 참가자와 능력치를 딕셔너리로 입력함

각 사람의 최대 능력치를 비교해서 가장 큰 K명을 본선으로 올려보낸다.

ver.2

별개의 6개의 숫자들을 딕셔너리로 묶는 방법을 모르겠다.

일단 모두 리스트로 받고 딕셔너리를 만들어봐야겠다.

ver.3

딕셔너리의 key를 참가자로, value를 능력치로 잡고

각 참가자들마다 최고의 능력치를 genre_dict에 저장한다.

최고 능력치를 만났을 때 dict를 갱신해준다.

상위 K개만 뽑아내서 그 능력치를 모두 더한다.

ver.4

소수점 출력으로 바꿔본다.

print(f'{score:.1f}')
  • f string으로 소수점 첫째자리까지 출력하는 방법

정답!

코드

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
profile
Speech Synthesis & Voice Cloning

0개의 댓글