문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
다음과 같은 방식으로 n = num_people의 사람들에게 일정량의 candies를 분배한다.
첫 번째 사람에게 1개, 두 번째 사람에게 2개를 주고 마지막 사람에게 n개를 줄 때까지 반복한다.
그 다음, 시작 부분으로 돌아가서 첫 번째 사람에게 n + 1개, 두 번째 사람에게 n + 2개, 마지막 사람에게 2 * n개의 사탕을 줄 때까지 반복한다.
이 과정은 사탕이 다 떨어질 때까지 반복한다. 마지막에 사탕을 받는 사람은 남은 사탕을 모두 받는다.
최종 사탕 분배를 나타내는 배열을 반환해라.
#1
Input: candies = 7, num_people = 4
Output: [1, 2, 3, 1]
Explanation:
첫 번째 차례에 ans[0] += 1, 배열은 [1, 0, 0, 0]이다.
두 번째 차례에 ans[1] += 2, 배열은 [1, 2, 0, 0]이다.
세 번째 차례에 ans[2] += 3, 배열은 [1, 2, 3, 0]이다.
네 번째 차례에 ans[3] += 1, 최종 배열은 [1, 2, 3, 1]이다.
#2
Input: candies = 10, num_people = 3
Output: [5, 2, 3]
Explanation:
첫 번째 차례에 ans[0] += 1, 배열은 [1, 0, 0]이다.
두 번째 차례에 ans[1] += 2, 배열은 [1, 2, 0]이다.
세 번째 차례에 ans[2] += 3, 배열은 [1, 2, 3]이다.
네 번째 차례에 ans[0] += 4, 최종 배열은 [5, 2, 3]이다.
class Solution {
public int[] distributeCandies(int candies, int num_people) {
int[] result = new int[num_people];
int countCandy = 1;
int idx = 0;
while(candies > 0){
int person = idx % num_people;
int giveCandy = Math.min(countCandy, candies);
result[person] += giveCandy;
candies -= giveCandy;
countCandy++;
idx++;
}
return result;
}
}