자판기 클래스


답안 제출

Points: 1
시간 제한: 2.0s
메모리 제한: 1G

문제 유형
허용된 언어
Python

한 종류의 상품을 판매하며 투입된 금액과 재고를 관리하는 VendingMachine 클래스를 작성하시오.

작성할 클래스

다음 형태의 클래스를 작성한다.

class VendingMachine:
    def __init__(self, price, stock):
        # 코드를 작성하세요.

    def insert_money(self, amount):
        # 코드를 작성하세요.

    def buy(self):
        # 코드를 작성하세요.

    def get_status(self):
        # 코드를 작성하세요.
  • 생성자 __init__(price, stock)은 상품 한 개의 가격 price와 초기 재고 stock을 저장한다. 처음 투입된 금액은 0이다.
  • insert_money(amount)는 투입된 금액에 amount를 더하고 값을 반환하지 않는다.
  • buy()는 재고가 1개 이상이고 투입된 금액이 가격 이상일 때만 상품을 판매한다. 판매하면 투입 금액에서 가격을 빼고 재고를 1 감소시킨 뒤 True를 반환한다.
  • buy()가 상품을 판매할 수 없다면 투입 금액과 재고를 변경하지 않고 False를 반환한다.
  • get_status()는 현재 투입 금액과 재고를 (money, stock) 형태의 tuple로 반환한다.

클래스를 사용하는 코드

작성한 클래스는 아래 코드와 함께 실행된다.

price, stock = map(int, input().split())
q = int(input())

machine = VendingMachine(price, stock)

for _ in range(q):
    command = input().split()

    if command[0] == "insert":
        result = machine.insert_money(int(command[1]))
        print(type(result))
    elif command[0] == "buy":
        result = machine.buy()
        print(result)
        print(type(result))
    else:
        result = machine.get_status()
        print(*result)
        print(type(result))

위 코드가 정상적으로 동작하도록 클래스를 작성한다. 제출할 때는 작성한 클래스의 정의 전체만 제출한다. 입력을 받거나 객체를 생성하는 코드는 제출하지 않는다.

입력

첫째 줄에 상품 가격 price와 초기 재고 stock이 주어진다.

둘째 줄에 명령의 개수 \(Q\)가 주어진다.

다음 \(Q\)개의 줄에 명령이 하나씩 주어진다. 명령의 종류는 다음과 같다.

  • insert amount: insert_money(amount)를 호출한다.
  • buy: buy()를 호출한다.
  • status: get_status()를 호출한다.

  • \(1 \le price \le 1,000,000,000\)

  • \(0 \le stock \le 1,000\)
  • \(1 \le Q \le 1,000\)
  • \(0 \le amount \le 1,000,000,000\)

출력

insert 명령에서는 insert_money()가 반환한 값의 자료형을 출력한다.

buy 명령에서는 구매 성공 여부와 buy()가 반환한 값의 자료형을 출력한다.

status 명령에서는 현재 투입 금액과 재고, get_status()가 반환한 값의 자료형을 출력한다.

각 메서드를 호출한 뒤에는 반환값의 자료형도 출력한다.

예제 입력 1

100 3
10
status
insert 250
buy
status
buy
buy
insert 50
buy
status
buy

예제 출력 1

0 3
<class 'tuple'>
<class 'NoneType'>
True
<class 'bool'>
150 2
<class 'tuple'>
True
<class 'bool'>
False
<class 'bool'>
<class 'NoneType'>
True
<class 'bool'>
0 0
<class 'tuple'>
False
<class 'bool'>

예제 설명 1

상품 가격은 \(100\), 초기 재고는 3개이며 처음 투입된 금액은 \(0\)이다.

  1. status는 현재 상태 (0, 3)을 반환한다.
  2. insert 250으로 투입 금액이 \(250\)이 된다.
  3. 첫 번째 buy는 성공하여 투입 금액은 \(150\), 재고는 2개가 된다.
  4. status는 현재 상태 (150, 2)를 반환한다.
  5. 두 번째 buy는 성공하여 투입 금액은 \(50\), 재고는 1개가 된다.
  6. 세 번째 buy는 금액이 부족하므로 실패하며 상태는 변하지 않는다.
  7. insert 50으로 투입 금액이 \(100\)이 된다.
  8. 네 번째 buy는 성공하여 투입 금액과 재고가 모두 \(0\)이 된다.
  9. status는 현재 상태 (0, 0)을 반환한다.
  10. 마지막 buy는 재고가 없으므로 실패한다.

예제 입력 2

500 0
6
status
insert 1000
buy
status
insert 200
buy

예제 출력 2

0 0
<class 'tuple'>
<class 'NoneType'>
False
<class 'bool'>
1000 0
<class 'tuple'>
<class 'NoneType'>
False
<class 'bool'>

코멘트

현재 작성된 코멘트가 없습니다.