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

Python으로 사람들에게 사탕 배포하기

<시간/>

다음과 같은 방법으로 n명의 사람들에게 몇 개의 사탕을 분배하려고 한다고 가정합니다. -

  • 첫 번째 사람에게는 사탕 1개, 두 번째 사람에게는 사탕 2개를 주는 식으로 마지막 사람에게 n개의 사탕을 줄 때까지 계속됩니다.
  • 그 후 다시 행의 처음으로 돌아가서 첫 번째 사람에게는 n+1개의 사탕을, 두 번째 사람에게는 n+2개의 사탕을 주는 식으로 마지막 사람에게 2*n개의 사탕을 줄 때까지 계속됩니다. .

사탕이 다 떨어질 때까지 이 과정을 반복합니다. 마지막 사람들은 남은 사탕을 모두 받게 됩니다(반드시 이전 선물보다 하나 더 많을 필요는 없음).

사탕의 최종 분포를 나타내는 배열을 반환해야 합니다. 따라서 사탕이 7이고 n =3이라고 가정하면 출력은 [2, 2, 3]이 됩니다. 따라서 처음에는 첫 번째 사람이 1을 얻습니다. 배열은 [1, 0, 0], 두 번째 사람은 2, 다음 배열은 [1, 2, 0], 세 번째 사람은 3, 그 다음 배열은 [1, 2, 3], 마지막으로 첫 번째 것은 다시 1을 얻었으므로 배열은 [2, 2, 3]

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

  • res는 n개 요소의 배열이며 0으로 채움
  • 색인:=0
  • 사탕하는 동안> 0
    • res[index mod n] :=res[index mod n] + 사탕의 최소값과 index + 1
    • 사탕 :=사탕 – 1
    • 인덱스 :=인덱스 + 1
  • 반환 결과

예시

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

class Solution(object):
   def distributeCandies(self, candies, num_people):
      res = [0 for i in range(num_people)]
      index = 0
      while candies>0:
         res[index%num_people] += min(candies,index+1)
         candies-=(index+1)
         index+=1
      return res
ob1 = Solution()
print(ob1.distributeCandies(8, 3))

입력

8
3

출력

[3, 2, 3]