[LeetCode] Distribute Candies to People

아르당·2026년 4월 1일

LeetCode

목록 보기
236/254
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

다음과 같은 방식으로 n = num_people의 사람들에게 일정량의 candies를 분배한다.

첫 번째 사람에게 1개, 두 번째 사람에게 2개를 주고 마지막 사람에게 n개를 줄 때까지 반복한다.
그 다음, 시작 부분으로 돌아가서 첫 번째 사람에게 n + 1개, 두 번째 사람에게 n + 2개, 마지막 사람에게 2 * n개의 사탕을 줄 때까지 반복한다.

이 과정은 사탕이 다 떨어질 때까지 반복한다. 마지막에 사탕을 받는 사람은 남은 사탕을 모두 받는다.

최종 사탕 분배를 나타내는 배열을 반환해라.

Example

#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]이다.

Constraints

  • 1 <= candies <= 10^9
  • 1 <= num_people <= 1000

Solved

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;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글