공동 창고 클래스


답안 제출

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

문제 유형
허용된 언어
Python

세 창고의 개별 재고와 모든 창고의 전체 재고를 관리하는 Warehouse 클래스를 작성하시오.

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

작성할 클래스

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

class Warehouse:
    total_stock = 0

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

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

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

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

    @classmethod
    def get_total_stock(cls):
        # 코드를 작성하세요.
  • 각 객체는 해당 창고의 현재 재고를 저장한다.
  • 클래스 변수 total_stock은 모든 창고의 재고 합계이며 처음에는 0이다.
  • 생성자는 초기 재고를 저장하고 그만큼 total_stock을 증가시킨다.
  • add_stock(amount)는 해당 창고와 전체 재고를 amount만큼 증가시킨다.
  • remove_stock(amount)는 해당 창고와 전체 재고를 amount만큼 감소시킨다.
  • get_stock()은 해당 창고의 재고를 int로 반환한다.
  • 클래스 메서드 get_total_stock()은 모든 창고의 전체 재고를 int로 반환한다.

클래스를 사용하는 코드

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

stocks = list(map(int, input().split()))
warehouses = [Warehouse(stock) for stock in stocks]
q = int(input())

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

    if command[0] == "add":
        warehouses[int(command[1]) - 1].add_stock(int(command[2]))
    elif command[0] == "remove":
        warehouses[int(command[1]) - 1].remove_stock(int(command[2]))
    elif command[0] == "stock":
        result = warehouses[int(command[1]) - 1].get_stock()
        print(result)
        print(type(result))
    else:
        result = Warehouse.get_total_stock()
        print(result)
        print(type(result))

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

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

입력

첫째 줄에 세 창고의 초기 재고가 차례대로 주어진다.

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

  • add i amount: \(i\)번째 창고에 재고를 추가한다.
  • remove i amount: \(i\)번째 창고에서 재고를 출고한다.
  • stock i: \(i\)번째 창고의 재고를 조회한다.
  • total: 모든 창고의 전체 재고를 조회한다.

  • 초기 재고는 0 이상 \(1,000,000,000\) 이하이다.

  • \(1 \le Q \le 1,000\)
  • \(1 \le i \le 3\)
  • \(1 \le amount \le 1,000,000,000\)
  • remove 명령의 양은 해당 창고의 현재 재고보다 크지 않다.

출력

stocktotal 명령마다 반환값과 반환값의 자료형을 출력한다. addremove 명령은 아무것도 출력하지 않는다.

예제 입력 1

10 20 5
7
total
add 1 10
remove 2 5
stock 1
stock 2
stock 3
total

예제 출력 1

35
<class 'int'>
20
<class 'int'>
15
<class 'int'>
5
<class 'int'>
40
<class 'int'>

예제 설명 1

처음 세 창고의 재고는 각각 10, 20, 5이므로 전체 재고는 35이다.

첫 번째 창고에 10을 추가하면 재고는 20, 전체 재고는 45가 된다. 두 번째 창고에서 5를 출고하면 재고는 15, 전체 재고는 40이 된다. 따라서 마지막 개별 재고는 20, 15, 5이며 전체 재고는 40이다.

예제 입력 2

0 0 0
4
total
add 2 1
stock 2
total

예제 출력 2

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

코멘트

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