-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
λ¬Έμ μ€λͺ | Candy
π μ μ½μ‘°κ±΄
n == ratings.length1 <= n <= 2 * 10^40 <= ratings[i] <= 2 * 10^4
π‘ μμ
-
Input: ratings = [1,0,2]
- Output: 5
- μ€λͺ : 첫 λ²μ§Έ, λ λ²μ§Έ, μΈ λ²μ§Έ μμ΄μκ² κ°κ° 2, 1, 2κ°μ μ¬νμ λλ μ€
-
Input: ratings = [1,2,2]
- Output: 4
- μ€λͺ : 첫 λ²μ§Έ, λ λ²μ§Έ, μΈ λ²μ§Έ μμ΄μκ² κ°κ° 1, 2, 1κ°μ μ¬νμ λλ μ€. μΈ λ²μ§Έ μμ΄λ μμ λ 쑰건μ λ§μ‘±νκΈ° λλ¬Έμ 1κ°μ μ¬νμ λ°μ
λ¬Έμ ν΄κ²° κ³Όμ
Step 1: λ¬Έμ μ΄ν΄νκΈ°
- μμ μμλ‘ λ¬Έμ μ΄ν΄νκΈ°
- μμ 1: [1,0,2] β κ²°κ³Ό 5
- 첫 λ²μ§Έ μμ΄(1)λ λ λ²μ§Έ μμ΄(0)λ³΄λ€ λμ νκ°λ₯Ό λ°μμΌλ―λ‘ λ λ§μ μ¬νμ λ°μμΌ ν¨
- μΈ λ²μ§Έ μμ΄(2)λ λ λ²μ§Έ μμ΄(0)λ³΄λ€ λμ νκ°λ₯Ό λ°μμΌλ―λ‘ λ λ§μ μ¬νμ λ°μμΌ ν¨
- μ΅μ μ¬ν κ°μ: [2,1,2] β μ΄ 5κ°
- μμ 2: [1,2,2] β κ²°κ³Ό 4
- λ λ²μ§Έ μμ΄(2)λ 첫 λ²μ§Έ μμ΄(1)λ³΄λ€ λμ νκ°λ₯Ό λ°μμΌλ―λ‘ λ λ§μ μ¬νμ λ°μμΌ ν¨
- μΈ λ²μ§Έ μμ΄(2)λ μΈμ ν μμ΄μ νκ°κ° κ°μ μ΅μ 1κ°μ μ¬νμ λ°μ
- μ΅μ μ¬ν κ°μ: [1,2,1] β μ΄ 4κ°
- μμ 1: [1,0,2] β κ²°κ³Ό 5
Step 2: μ κ·Ό λ°©λ²
- μ§κ΄μ μΌλ‘ μκ°νκΈ°
- λͺ¨λ μμ΄μκ² μ°μ 1κ°μ μ¬νμ μ€
- μμͺ½ μ΄μκ³Όμ κ΄κ³λ₯Ό κ³ λ €ν΄μΌ ν¨
- ν λ°©ν₯μΌλ‘λ§ λΉκ΅νλ©΄ μμͺ½ μ΄μκ³Όμ κ΄κ³λ₯Ό λͺ¨λ κ³ λ €ν μ μμ
- 그리λ μκ³ λ¦¬μ¦ μ μ©
- μλ°©ν₯μΌλ‘ νμνμ¬ μ΅μ μ¬ν κ°μ κ³μ°
- μΌμͺ½βμ€λ₯Έμͺ½ ν¨μ€: νμ¬ μμ΄μ νκ°κ° μΌμͺ½ μμ΄λ³΄λ€ λμΌλ©΄ μΌμͺ½ μμ΄λ³΄λ€ 1κ° λ λ§μ μ¬νμ μ€
- μ€λ₯Έμͺ½βμΌμͺ½ ν¨μ€: νμ¬ μμ΄μ νκ°κ° μ€λ₯Έμͺ½ μμ΄λ³΄λ€ λμΌλ©΄ μ€λ₯Έμͺ½ μμ΄λ³΄λ€ 1κ° λ λ§μ μ¬νμ μ€
Step 3: μ½λ μ€κ³
- μ¬ν λ°°μ΄ μ΄κΈ°ν: λͺ¨λ μμ΄μκ² 1κ°μ μ¬νμ ν λΉ
- μΌμͺ½βμ€λ₯Έμͺ½ ν¨μ€:
- νμ¬ μμ΄μ νκ°κ° μΌμͺ½ μμ΄λ³΄λ€ λμΌλ©΄ μΌμͺ½ μμ΄μ μ¬ν + 1
- μ€λ₯Έμͺ½βμΌμͺ½ ν¨μ€:
- νμ¬ μμ΄μ νκ°κ° μ€λ₯Έμͺ½ μμ΄λ³΄λ€ λμΌλ©΄ max(νμ¬ μ¬ν, μ€λ₯Έμͺ½ μμ΄μ μ¬ν + 1)
- λͺ¨λ μ¬νμ ν© λ°ν
Step 4: μ½λ ꡬν
/**
* @param {number[]} ratings
* @return {number}
*/
var candy = function(ratings) {
const n = ratings.length;
const candies = new Array(n).fill(1); // λͺ¨λ μμ΄μκ² μΌλ¨ 1κ°μ© μ¬ν ν λΉ
// μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μν
for (let i = 1; i < n; i++) {
if (ratings[i] > ratings[i-1]) {
candies[i] = candies[i-1] + 1;
}
}
// μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μν
for (let i = n - 2; i >= 0; i--) {
if (ratings[i] > ratings[i+1]) {
// νμ¬ κ°κ³Ό (μ€λ₯Έμͺ½ μμ΄ μ¬ν + 1) μ€ λ ν° κ°μΌλ‘ μ€μ
candies[i] = Math.max(candies[i], candies[i+1] + 1);
}
}
// λͺ¨λ μ¬νμ ν©κ³λ₯Ό λ°ν
return candies.reduce((sum, val) => sum + val, 0);
};