본문 바로가기
Problem Solving

[C++] [LeetCode 860] Lemonade Change (pps 3-7)

by tls1107 2021. 7. 16.
728x90
반응형


문제 풀기 전 생각 : 

 

 

/*
먼저 
동전이 입력되었을 때 

5코인이 지불되었다면 가능한 경우의 수는 5코인이 하나 증가하는 것 뿐이다.

10 코인이 지불 되었다면 가능한 경우의 수는 10코인이 하나 증가하고 5코인이 하나 감소하는 것이다.
만약 5코인을 하나 감소시킨 뒤 5코인이 0보다 작으면 false 를 리턴한다.

20 코인이 지불 되었다면 가능한 경우의 수는 10코인이 하나 감소하고 5코인이 하나 감소하거나
5코인이 세개 감소하는 것이다
만약 두가지 경우 모두 5코인과 10코인의 수가 부족하다면 false를 리턴한다.

그리고 만약 모든 작업이 리턴이 되지 않고 정상적으로 끝났다면 
true를 리턴한다.
*/

 


class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        
        int m5 = 0;
        int m10 = 0;
        
        for(int i=0 ; i<bills.size() ; i++){
            if(bills[i] == 5) m5++;
            else if(bills[i] == 10) {
                m5--;
                m10++;
                if(m5 < 0 ) return false;
            }
            else if(bills[i] == 20){
                if(m10 > 0 && m5 > 0){
                    m10--;
                    m5--;
                }
                else if(m5 > 2){
                    m5 -= 3;   
                }
                else return false;
            }
        }
        
        return true;
    }
};

https://leetcode.com/problems/lemonade-change/

 

Lemonade Change - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


풀 때 어려웠던 점 또는 느낀점 :

요즘 알바와 캠프를 병행하다보니

문제를 풀어야 한다는 압박이 생겼다

그래서 문제를 볼때 어렵게만 본 듯 하다

복잡한 조건문들을 나열하려다 가능한 경우의 수를 따져보니 

굉장히 간단한 문제였다

문제를 푸는 방법을 생각할 때 가능한 경우의 수들을 

예상해보는 시도가 필요하다는 것을 느꼈다.

 


개선방안 :

class Solution {
public:
    bool lemonadeChange(vector<int>& a ){
        int n=a.size();
        int c=0,d=0;
        for(int i=0;i<n;i++)
        {
            if(a[i]==5)
                c+=1;
            else if(a[i]==10)
            {
                if(c<1)
                    return false;
                else
                {
                   c--;
                   d+=1;
                }  
                
            }
            else if(a[i]==20)
            {
                if(c<1)
                    return false;
                else if(c>=1 && d>=1)
                {  c--; d--; }
                else if(c>=3)
                    c-=3;
                else
                    return false;
            }
        }
        return true;
    }
};

코인이 입력이 되었을 때 나는 코인을 감소한 뒤 

조건문으로 리턴할지 말지 판별했다

하지만 감소시키는 작업을 하기 전에도 충분히 

조건문으로 판별이 가능하다.

작지만 쓸데없이 코드가 늘어난 것이다.

이부분 주의해야겠다.

728x90
반응형

댓글