Skip to content

CandyΒ #62

@hsskey

Description

@hsskey

문제 μ„€λͺ… | Candy

πŸ“ μ œμ•½μ‘°κ±΄

  • n == ratings.length
  • 1 <= n <= 2 * 10^4
  • 0 <= 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개

Step 2: μ ‘κ·Ό 방법

  • μ§κ΄€μ μœΌλ‘œ μƒκ°ν•˜κΈ°
    • λͺ¨λ“  μ•„μ΄μ—κ²Œ μš°μ„  1개의 사탕을 쀌
    • μ–‘μͺ½ μ΄μ›ƒκ³Όμ˜ 관계λ₯Ό κ³ λ €ν•΄μ•Ό 함
    • ν•œ λ°©ν–₯으둜만 λΉ„κ΅ν•˜λ©΄ μ–‘μͺ½ μ΄μ›ƒκ³Όμ˜ 관계λ₯Ό λͺ¨λ‘ κ³ λ €ν•  수 μ—†μŒ
  • 그리디 μ•Œκ³ λ¦¬μ¦˜ 적용
    • μ–‘λ°©ν–₯으둜 νƒμƒ‰ν•˜μ—¬ μ΅œμ†Œ 사탕 개수 계산
    • μ™Όμͺ½β†’μ˜€λ₯Έμͺ½ 패슀: ν˜„μž¬ μ•„μ΄μ˜ 평가가 μ™Όμͺ½ 아이보닀 λ†’μœΌλ©΄ μ™Όμͺ½ 아이보닀 1개 더 λ§Žμ€ 사탕을 쀌
    • 였λ₯Έμͺ½β†’μ™Όμͺ½ 패슀: ν˜„μž¬ μ•„μ΄μ˜ 평가가 였λ₯Έμͺ½ 아이보닀 λ†’μœΌλ©΄ 였λ₯Έμͺ½ 아이보닀 1개 더 λ§Žμ€ 사탕을 쀌

Step 3: μ½”λ“œ 섀계

  1. 사탕 λ°°μ—΄ μ΄ˆκΈ°ν™”: λͺ¨λ“  μ•„μ΄μ—κ²Œ 1개의 사탕을 ν• λ‹Ή
  2. μ™Όμͺ½β†’μ˜€λ₯Έμͺ½ 패슀:
    • ν˜„μž¬ μ•„μ΄μ˜ 평가가 μ™Όμͺ½ 아이보닀 λ†’μœΌλ©΄ μ™Όμͺ½ μ•„μ΄μ˜ 사탕 + 1
  3. 였λ₯Έμͺ½β†’μ™Όμͺ½ 패슀:
    • ν˜„μž¬ μ•„μ΄μ˜ 평가가 였λ₯Έμͺ½ 아이보닀 λ†’μœΌλ©΄ max(ν˜„μž¬ 사탕, 였λ₯Έμͺ½ μ•„μ΄μ˜ 사탕 + 1)
  4. λͺ¨λ“  μ‚¬νƒ•μ˜ ν•© λ°˜ν™˜

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);
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions