번호표 클래스
세 번호표 발급기의 개별 발급 수와 전체 발급 순서를 관리하는 Ticket 클래스를 작성하시오.
이 문제에서는 여러 객체가 각각 저장하는 값과 모든 객체가 공유하는 클래스 변수를 함께 다룬다.
작성할 클래스
다음 형태의 클래스를 작성한다.
class Ticket:
next_number = 1
total_count = 0
def __init__(self):
# 코드를 작성하세요.
def take_number(self):
# 코드를 작성하세요.
def get_count(self):
# 코드를 작성하세요.
@classmethod
def get_total_count(cls):
# 코드를 작성하세요.
- 번호표 번호는 세 객체가 함께 공유하며 1부터 차례대로 발급한다.
- 클래스 변수
next_number는 다음에 발급할 번호이며 처음에는 1이다. - 클래스 변수
total_count는 전체 발급 수이며 처음에는 0이다. - 각 객체는 자신이 발급한 번호표의 수를 0부터 따로 관리한다.
take_number()는 현재 번호를 발급한 뒤 해당 객체의 발급 수, 전체 발급 수, 다음 번호를 갱신하고 발급한 번호를int로 반환한다.get_count()는 해당 객체의 발급 수를int로 반환한다.- 클래스 메서드
get_total_count()는 전체 발급 수를int로 반환한다.
클래스를 사용하는 코드
작성한 클래스는 아래 코드와 함께 실행된다.
q = int(input())
tickets = [Ticket(), Ticket(), Ticket()]
for _ in range(q):
command = input().split()
if command[0] == "take":
result = tickets[int(command[1]) - 1].take_number()
print(result)
print(type(result))
elif command[0] == "count":
result = tickets[int(command[1]) - 1].get_count()
print(result)
print(type(result))
else:
result = Ticket.get_total_count()
print(result)
print(type(result))
위 코드가 정상적으로 동작하도록 클래스를 작성한다. 제출할 때는 작성한 클래스의 정의 전체만 제출한다. 입력을 받거나 객체를 생성하는 코드는 제출하지 않는다.
상태만 변경하는 메서드의 반환값은 출력하지 않는다. 값을 조회하거나 계산 결과를 반환하는 메서드는 반환값과 자료형을 출력한다.
입력
첫째 줄에 명령 수 \(Q\)가 주어진다. 세 번호표 객체는 명령을 처리하기 전에 생성된다.
다음 \(Q\)개의 줄에는 다음 명령 중 하나가 주어진다.
take i: \(i\)번째 객체에서 번호표를 발급한다.count i: \(i\)번째 객체가 발급한 번호표 수를 조회한다.total: 전체 발급 수를 조회한다.\(1 \le Q \le 1,000\)
- \(1 \le i \le 3\)
출력
모든 명령마다 반환값과 반환값의 자료형을 출력한다.
예제 입력 1
9
take 1
take 2
take 1
take 3
take 2
count 1
count 2
count 3
total
예제 출력 1
1
<class 'int'>
2
<class 'int'>
3
<class 'int'>
4
<class 'int'>
5
<class 'int'>
2
<class 'int'>
2
<class 'int'>
1
<class 'int'>
5
<class 'int'>
예제 설명 1
첫 번째, 두 번째, 첫 번째, 세 번째, 두 번째 객체에서 차례로 번호표를 발급한다. 모든 객체가 발급 순서를 공유하므로 반환되는 번호는 1, 2, 3, 4, 5이다.
첫 번째 객체와 두 번째 객체는 각각 2장, 세 번째 객체는 1장을 발급했다. 전체 발급 수는 5이다.
예제 입력 2
4
total
count 1
count 2
count 3
예제 출력 2
0
<class 'int'>
0
<class 'int'>
0
<class 'int'>
0
<class 'int'>
코멘트