계산대 클래스


답안 제출

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

문제 유형
허용된 언어
Python

세 계산대의 구매 순서를 함께 세어 매 세 번째 구매를 반값으로 계산하는 CashRegister 클래스를 작성하시오.

이 문제에서는 여러 객체가 각각 저장하는 값과 모든 객체가 공유하는 클래스 변수를 함께 다룬다.

작성할 클래스

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

class CashRegister:
    purchase_count = 0
    total_sales = 0

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

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

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

    @classmethod
    def get_purchase_count(cls):
        # 코드를 작성하세요.

    @classmethod
    def get_total_sales(cls):
        # 코드를 작성하세요.
  • 각 객체는 해당 계산대의 누적 판매 금액을 0부터 관리한다.
  • 클래스 변수 purchase_count는 모든 계산대에서 발생한 전체 구매 횟수이며 처음에는 0이다.
  • 클래스 변수 total_sales는 모든 계산대의 누적 판매 금액이며 처음에는 0이다.
  • purchase(price)는 전체 구매 횟수를 1 증가시킨다. 3의 배수 번째 구매라면 결제 금액은 price // 2, 아니면 price이다. 결제 금액을 해당 계산대와 전체 판매 금액에 더한 뒤 int로 반환한다.
  • get_sales()는 해당 계산대의 누적 판매 금액을 int로 반환한다.
  • 클래스 메서드 get_purchase_count()는 전체 구매 횟수를 int로 반환한다.
  • 클래스 메서드 get_total_sales()는 모든 계산대의 누적 판매 금액을 int로 반환한다.

클래스를 사용하는 코드

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

q = int(input())
registers = [CashRegister(), CashRegister(), CashRegister()]

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

    if command[0] == "buy":
        result = registers[int(command[1]) - 1].purchase(int(command[2]))
        print(result)
        print(type(result))
    elif command[0] == "sales":
        result = registers[int(command[1]) - 1].get_sales()
        print(result)
        print(type(result))
    elif command[0] == "count":
        result = CashRegister.get_purchase_count()
        print(result)
        print(type(result))
    else:
        result = CashRegister.get_total_sales()
        print(result)
        print(type(result))

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

상태만 변경하는 메서드의 반환값은 출력하지 않는다. 값을 조회하거나 계산 결과를 반환하는 메서드는 반환값과 자료형을 출력한다.

입력

첫째 줄에 명령 수 \(Q\)가 주어진다. 세 계산대 객체는 명령을 처리하기 전에 생성된다.

다음 \(Q\)개의 줄에는 다음 명령 중 하나가 주어진다.

  • buy i price: \(i\)번째 계산대에서 가격이 price인 상품을 구매한다.
  • sales i: \(i\)번째 계산대의 누적 판매 금액을 조회한다.
  • count: 모든 계산대의 전체 구매 횟수를 조회한다.
  • total: 모든 계산대의 누적 판매 금액을 조회한다.

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

  • \(1 \le i \le 3\)
  • \(10 \le price \le 1,000,000,000\)
  • price는 항상 10의 배수이다.

출력

모든 명령마다 반환값과 반환값의 자료형을 출력한다.

예제 입력 1

11
buy 1 1000
buy 2 3000
buy 1 5000
buy 3 2000
buy 2 4000
buy 3 7000
sales 1
sales 2
sales 3
count
total

예제 출력 1

1000
<class 'int'>
3000
<class 'int'>
2500
<class 'int'>
2000
<class 'int'>
4000
<class 'int'>
3500
<class 'int'>
3500
<class 'int'>
7000
<class 'int'>
5500
<class 'int'>
6
<class 'int'>
16000
<class 'int'>

예제 설명 1

모든 계산대의 구매 순서를 합쳐 세므로 첫 여섯 구매의 결제 금액은 차례로 1000, 3000, 2500, 2000, 4000, 3500이다. 세 번째와 여섯 번째 구매에 반값 할인이 적용된다.

첫 번째 계산대의 누적 판매 금액은 3500, 두 번째는 7000, 세 번째는 5500이다. 전체 구매 횟수는 6, 전체 판매 금액은 16000이다.

예제 입력 2

5
count
total
sales 1
sales 2
sales 3

예제 출력 2

0
<class 'int'>
0
<class 'int'>
0
<class 'int'>
0
<class 'int'>
0
<class 'int'>

코멘트

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