860. Lemonade Change

mm723·2022년 3월 25일
0

리트코드

목록 보기
17/21

문제 설명

5달러의 레모네이드를 판매하는 가판대가 있다. 손님들은 당신에게서 구매하기 위해 대기하고 있고(queue), 한 번에 한 명씩 주문을 받을 수 있다. 각 손님들은 한 잔의 레모네이드를 구매할 때, $5,$10,$20 지폐 단위 중 하나로 지불한다.
당신은 반드시 5달러로 판매해야 하고, 손님들에게 올바른 거스름 돈을 주어야 한다. 판매 전 여분의 거스름 돈은 존재하지 않는다.
정수형 배열 bills가 주어진다. (bills[i]는 i번째 손님이 낸 금액이다.)
올바른 거스름 돈을 줄 수 있다면 true, 없으면 false를 출력하라.

출력 예시


접근 방법

첫번째 시도

일단 처음부터 확인하기,,, 해시 테이블로 가지고 있는 거스름 돈을 입력하고 $10,$20 손님을 마주칠 때 거스름 돈 있나 검색하기,,,?

소스코드

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int change[3]={0}; // change[0]=$5,[1]=$10,[2]=$20
        
        if(bills[0]==5) change[0]++;
        else if(bills[0]==10) change[1]++;
        else change[2]++;
        
        for(auto itr = bills.begin()+1; itr!=bills.end(); itr++){
            if(*itr == 5){
                change[0]++;
            }
            else if(*itr == 10) {
                if(change[0]>0) change[0]--;  
                else return false;
                change[1]++;
            }
            else{
                if(change[0]>0 && change[1]>0) {
                    change[0]--;
                    change[1]--;
                }
                else if(change[0]>2) change[0]-=3;
                else return false;
                change[2]++;
            }
            
        
        }
        return true;
    }
};

돌아보기

굳이 배열 안 쓰고 int five, int ten 으로 해도 됨,,
위에 첫번째 인덱스의 원소를 따로 처리 해 줄 필요도 없었다.

profile
안냐세여

0개의 댓글