show라고 하는 문자열 목록이 있고 durations라고 하는 정수 목록도 있고 또 다른 값 k가 있다고 가정합니다. 여기서 show[i]와 durations[i]는 i번째 사람이 시청한 쇼와 해당 기간을 나타냅니다. k개의 가장 많이 본 프로그램의 총 시청 시간을 찾습니다.
따라서 입력이 다음과 같은 경우 =["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"] 지속 시간 =[10, 8, 10, 18, 9] k =2에서 가장 많이 본 2개의 쇼는 "Jokers Company"와 "The BGT"이고 총 재생 시간은 18 및 10 + 10 =20이므로 출력은 38이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
쇼가 비어 있거나 지속 시간이 비어 있거나 k가 0이면
-
0 반환
-
-
d :=빈 사전
-
범위 0에서 쇼 크기까지의 경우 다음을 수행하십시오.
-
d[쇼[i]] :=d[쇼[i]] + 지속시간[i]
-
-
l :=새 목록
-
d의 각 i에 대해 수행
-
l
끝에 d[i] 삽입
-
-
목록 l을 역순으로 정렬
-
나는 :=0
-
답변 :=0
-
내가
-
답변 :=답변 + l[i]
-
나는 :=나는 + 1
-
-
답변을 반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
from collections import defaultdict def solve(shows, durations, k): if not shows or not durations or not k: return 0 d = defaultdict(int) for i in range(len(shows)): d[shows[i]] += durations[i] l = [] for i in d: l.append(d[i]) l.sort(reverse=True) i = 0 answer = 0 while i < k: answer += l[i] i += 1 return answer shows = ["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"] durations = [10, 8, 10, 18, 9] k = 2 print(solve(shows, durations, k))
입력
["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"], [10, 8, 10, 18, 9], 2
출력
38