이번 문제는 레몬에이드 판매 문제입니다.
레몬에이드는 각 5달러입니다.
인자로 받는 list는 고객이며, 숫자는 각 고객이 보유한 달러입니다. ( 5, 10, 20만 존재한다고 가정합니다. )
각 순서대로 레몬에이드를 끝까지 팔 수 있는지에 대한 문제입니다.
단, 판매 처음 거스름돈은 0달러인 채로 시작하게 됩니다.
아래는 제가 풀은 python code입니다.
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
change = [0, 0]
for bill in bills:
if bill == 5:
change[0] += 1
elif bill == 10:
if change[0] > 0:
change[0] -= 1
change[1] += 1
else: return False
else:
if change[0] > 0 and change[1] > 0:
change[0] -= 1
change[1] -= 1
elif change[0] > 2:
change[0] -= 3
else: return False
return True
저의 경우는 거스름돈인 5달러와 10달러를 관리할 list를 초기에 생성합니다.
( list[0] - 5달러 갯수, list[1] - 10달러 갯수 로 가정하였습니다. )
그 후, 각 [5, 10, 20] 달러가 들어왔을때를 가정하여 문제를 풀었습니다.
1. 5달러인 경우
-
거스름돈이 5달러가 추가되어 list 0번째 값을 1 증가시킵니다.
2. 10 달러인 경우
-
거스름돈 5달러를 주어야하기 때문에 list의 0번째는 1 감소시키며, list의 2번째는 1 증가시킵니다.
-
거스름돈인 5달러가 없는 경우에는 실패로 간주하여 False를 반환합니다.
3. 20달러인 경우
-
먼저 10달러짜리와 5달러로 거스름이 가능하다면, list의 0번째, 1번째 모두 1 감소시킵니다.
( 10달러를 받을 시 5달러로 거스름을 주어야 하기 때문에 10달러, 5달러 조합을 먼저 if 문에 걸리게 해야 합니다. )
-
5달러짜리로만 거스름이 가능하다면, list의 0번째를 3 감소시킵니다.
-
거스름이 불가능하다면 실패로 간주하여 False를 반환합니다.
거스름이 가능한지에 대한 문제로 배열에 20달러를 보유한 케이스는 제외하였습니다.
감사합니다.
'Algorithm > greedy' 카테고리의 다른 글
leetcode - Maximize Sum Of Array After K Negations (0) | 2020.03.11 |
---|---|
leetcode - Walking Robot Simulation (2) | 2020.03.10 |
leetcode - Assign Cookies (0) | 2020.03.04 |
leetcode - Is Subsequence (0) | 2020.03.03 |
leetcode - Best Time to Buy and Sell Stock II (2) | 2020.03.03 |