Problem Solving/LeetCode

[LeetCode / JS] Lemonade Change - Easy

애송이개발자 2023. 3. 26. 21:14

 

🚩 문제 풀러 가기

 

 

 

📄 접근 방법

 

그리디

 

더보기

문제 해석

  • 우리가 파는 레모네이트 가격은 $5입니다. 고객들은 무조건 레모네이드 한 개만 주문합니다.
  • 고객들이 지불하는 돈은 $5, $10, $20입니다.
  • 다만, 우리가 돈을 거슬러줘야할 때는 고객들이 지불했던 돈으로만 가능합니다.
  • 모두에게 거슬러 줄 수 있다면 true를 반환하고, 한 명이라도 거슬러주지 못한다면 false를 반환합니다.

1. 거슬러줄 돈을 저장할 collect 빈 객체를 선언합니다.

2. 받은 돈이 

  • $5일 때, $5가 없다면 1을 할당하고, 있다면 +1을 합니다.
  • $10일 때, $5가 있다면 -1 합니다. 그리고 $10가 없다면 1을 할당하고, 있다면 +1을 합니다.
    $5가 없으면 거슬러줄 수 없으므로 false를 반환합니다.
  • $20일 때는 두 가지 방법이 있습니다.
    1. $5, $10을 각각 -1 하기
    2. $5를 -3 하기
    이 두 가지 방법을 위의 방법처럼 해줍니다.

3. 위 조건들을 모두 통과하면 모두에게 거슬러줄 수 있는 것이므로 true를 반환합니다.

 


👨‍💻 나의 코드

var lemonadeChange = function(bills) {
    const collect = {}
    for (let bill of bills) {
        if (bill === 5) {
            if (!collect[bill]) collect[bill] = 1;
            else collect[bill]++;
        }
        else if (bill === 10) {
            if (collect['5'] > 0) {
                collect['5']--;
                if (!collect[bill]) collect[bill] = 1;
                else collect[bill]++;
            } else return false;
        }
        else if (bill === 20) {
            if (collect['5'] >= 1 && collect['10'] >= 1) {
                collect['5'] -= 1;
                collect['10'] -= 1;
                if (!collect[bill]) collect[bill] = 1;
                else collect[bill]++;
            } else if (collect['5'] >= 3) {
                collect['5'] -= 3;
                if (!collect[bill]) collect[bill] = 1;
                else collect[bill]++;
            }  
            else return false;
        }
    }
    return true;
};