Leetcode Java Candy
업데이트:
문제
코드
class Solution {
public int candy(int[] ratings) {
int[] candies = new int[ratings.length];
Arrays.fill(candies, 1);
for (int idx = 1; idx < candies.length; idx++) {
if (ratings[idx - 1] < ratings[idx]) {
candies[idx] = candies[idx - 1] + 1;
}
}
for (int idx = candies.length - 2; idx >= 0; idx--) {
if (ratings[idx] > ratings[idx + 1]) {
candies[idx] = Math.max(candies[idx], candies[idx + 1] + 1);
}
}
int sum = 0;
for (int candy : candies) {
sum += candy;
}
return sum;
}
}
결과
설명
- 주어진 아이들의 점수를 저장한 정수 배열 ratings를 이용하여, 아래의 요구 사항에 맞춰 사탕을 아이들에게 분배하기 위한 최소 개수를 구하는 문제이다.
- 각 어린이는 최소 한 개 이상의 캔디를 받는다.
- 주변 아이들보다 점수가 높은 아이는 더 많은 캔디를 받는다.
-
아이들에게 분배하는 캔디 개수를 저장하기 위한 정수 배열 candies를 ratings의 크기와 동일하게 만들고, 최소 분배 개수인 1을 배열의 모든 자리에 넣어준다.
-
좌측에서 우측으로 탐색하여 우측에 있는 아이가 점수가 높은 경우, 좌측에 있는 아이가 받는 캔디 개수보다 하나 더 받게 한다.
-
우측에서 좌측으로 다시 탐색하여 좌측에 있는 아이가 점수가 높은 경우, 좌측에 있는 아이가 받는 캔디의 개수와 우측에 있는 아이가 받는 캔디의 개수에 하나를 더한 값 중 큰 개수를 받게 한다.
- 아이들이 받는 캔디의 개수를 저장한 candies를 변수 sum에 누계하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기