다음과 같은 방법으로 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]