Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 가장 많이 본 K 프로그램의 총 지속 시간을 찾는 프로그램

<시간/>

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