Algorithm/LeetCode

860. Lemonade Change

땅다람쥐 2023. 9. 13. 10:57

문제


레모네이드의 가격은 $5입니다. 손님들은 $5, $10, $20을 낼 수가 있는데, $5보다 큰 금액을 내면은  정확한 거스름돈을 줘야합니다. 여기서 명심해야 할 것은 처음에 가지고 있는 거스름돈은 없습니다. Integer array로 bills을 받게 되는데 bills[i]는 ith 번째 손님이 지불하는 bill을 말합니다. 만약에 고객들한테 정확하게 거스름돈을 줄 수 있으면 true를 반환하고 아니면 false를 반환해야합니다.

 

조건을 보자면 아래와 같이 정리할 수 있는데요.

  • 초기에 가지고 있는 거스름돈 없음
  • 고객이 낼 수 있는 돈의 종류는 3가지
  • 정확하게 거스름돈을 줄 수 있는지 아닌지

풀이


푸는 방법은 여러가지 일 수 가 있겠는데요. 처음에 생각나는건 HashMap 이였습니다. key 값에 5,10,20을 저장하고 필요할 때 value의 값이 남아있지 않으면 false. 남아있으면 continue하는 방식으로요. 하지만 Running time이 너무 오래걸리더군요. 그래서 대안으로 생각한게 HashMap 대신 변수 선언으로 해결하는 방법입니다. 풀이는 아래와 같습니다.

 class Solution {
   public boolean lemonadeChange(int[] bills) {
    int five = 0;
    int ten = 0;
    for (int i = 0; i < bills.length; i++) {
    	if (bills[i] == 10) {
            if (five <= 0) {
            	return false;
            } else {
            	five--;
                ten++;
            }
        } else if (bills[i] == 20) {
            if (ten > 0 && five > 0) {
            	ten--;
                five--;
            } else if (five >= 3) {
            	five -= 3;
            } else {
            	return false;
            }
        } else {
        	five++;
        }
    }
    return true;
   }
}

 

먼저 five와 ten 변수를 선언을 해줍니다. 그리고 bills[i]의 종류에 따라 거스름 돈을 줄 수 있는지 아니면 안 줘도 되는지를 결정하면 됩니다.

 

복잡도


Bills을 전체 한 번 다 돌기 때문에 시간 복잡도는 O(n)이 나옵니다. 그리고 변수를 선언한건 five와 ten밖에 없기 때문에 공간 복잡도는 O(1)이 나오게 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Algorithm > LeetCode' 카테고리의 다른 글

134. Gas Station  (0) 2022.01.26
33. Search in Rotated Sorted Array  (0) 2022.01.23
605. Can Place Flowers  (0) 2022.01.19
167. Two Sum II - Input Array Is Sorted  (0) 2022.01.11
1010. Pairs of Songs With Total Durations Divisible by 60  (0) 2022.01.03