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

Python에서 최종 경기에서 몇 명의 수영 선수가 승리할 것인지 계산하는 프로그램

<시간/>

길이가 n인 nums라는 숫자 목록이 있다고 가정합니다. 이 목록에 있는 요소는 대회에서 수영 선수의 현재 점수를 나타냅니다. 결승전에서 이번 라운드의 1위 승자는 n점을, 2위 승자는 n-1점을 얻는 식입니다. 이번 라운드가 끝난 후 결승전에서 아직 우승할 수 있는 수영선수의 수를 확인해야 한다. 첫 번째 포인트가 동점인 경우에도 승리로 간주됩니다.

따라서 입력이 nums =[9, 6, 11, 12]와 같으면 출력은 3이 됩니다. 현재 점수가 9, 11 및 12인 수영 선수는 최종 점수가 [13]이면 모두 이길 수 있습니다. , 9, 13, 13]. 즉, 9점을 받은 선수가 1위를 하여 4점을 추가로 얻은 다음 6점 수영자가 2위를 얻었으므로 이제 점수는 9입니다. 11점 수영 선수가 3위를 차지하므로 새로운 점수는 13점, 12점 수영 선수는 1위를 얻습니다. 마지막 장소이므로 점수도 12입니다. 그러나 6점 수영 선수가 1위를 하더라도 최종 점수는 10점, 9점 수영 선수는 2위, 12점 등의 방식으로 2위 선수가 우승할 기회는 없습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • nums가 비어 있으면
    • 0을 반환
  • n :=숫자 크기
  • ans :=0
  • 목록 번호 정렬
  • a :=0
  • n - 1에서 0 사이의 i에 대해 1 감소, do
    • 캔디 :=nums[i] + n - i
    • 만일 경우> 그렇다면
      • a :=캔디
  • 숫자 단위의 각 x에 대해 다음을 수행합니다.
    • x + n>=a이면
      • ans :=ans + 1
  • 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(nums):
   if not nums:
      return 0
   n = len(nums)
   ans = 0
   nums.sort()
   a = 0
   for i in range(n - 1, -1, -1):
      cand = nums[i] + n - i
      if cand > a:
         a = cand
   for x in nums:
      if x + n >= a:
         ans += 1
   return ans

nums = [9, 6, 11, 12]
print(solve(nums))

입력

[9, 6, 11, 12]

출력

3