반응형

 

이번 문제는 레몬에이드 판매 문제입니다.

 

레몬에이드는 각 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달러를 보유한 케이스는 제외하였습니다.

 

감사합니다.

 

 

반응형

+ Recent posts