교통수단 요금 클래스
누적 이동 거리에 따라 서로 다른 요금을 계산하는 교통수단 클래스들을 작성하시오.
미리 작성된 코드
다음 부모 클래스는 제출 코드 앞에 자동으로 추가된다. 부모 클래스는 제출하거나 다시 작성하지 않는다.
class Transportation:
def __init__(self):
self.distance = 0
def move(self, distance):
self.distance += distance
def get_distance(self):
return self.distance
def get_fare(self):
return self.distance * 100
작성할 클래스
다음 자식 클래스만 작성한다.
class Bus(Transportation):
def get_fare(self):
# 코드를 작성하세요.
class Taxi(Transportation):
def get_fare(self):
# 코드를 작성하세요.
Transportation의 객체는 이동 거리 0에서 시작한다.move(distance)는 현재 이동 거리에distance를 더한다.get_distance()는 누적 이동 거리를int로 반환한다.Transportation.get_fare()는 누적 이동 거리의 100배를int로 반환한다.Bus.get_fare()는 이동 거리가 0이면 0을 반환한다. 이동 거리가 1 이상 10 이하이면 기본요금 \(1,500\)을 반환하고, 10을 초과하면 초과 거리 1마다 100을 더한다.Taxi.get_fare()는 이동 거리가 0이면 0을 반환한다. 이동 거리가 1 이상 2 이하이면 기본요금 \(4,000\)을 반환하고, 2를 초과하면 초과 거리 1마다 500을 더한다.Bus와Taxi는get_fare()만 오버라이딩하며 부모의 나머지 메서드를 그대로 상속한다.
클래스를 사용하는 코드
작성한 클래스들은 아래 코드와 함께 실행된다.
n = int(input())
vehicles = []
for _ in range(n):
vehicle_type = input()
if vehicle_type == "Transportation":
vehicles.append(Transportation())
elif vehicle_type == "Bus":
vehicles.append(Bus())
else:
vehicles.append(Taxi())
q = int(input())
for _ in range(q):
command = input().split()
vehicle = vehicles[int(command[1]) - 1]
if command[0] == "move":
vehicle.move(int(command[2]))
elif command[0] == "distance":
result = vehicle.get_distance()
print(result)
print(type(result))
else:
result = vehicle.get_fare()
print(result)
print(type(result))
위 코드가 정상적으로 동작하도록 작성할 자식 클래스의 정의 전체만 제출한다. 미리 작성된 부모 클래스, 입력을 받는 코드, 객체를 생성하는 코드는 제출하지 않는다.
상태만 변경하는 메서드의 반환값은 출력하지 않는다. 값을 조회하거나 계산 결과를 반환하는 메서드는 반환값과 자료형을 출력한다.
입력
첫째 줄에 객체 수 \(N\)이 주어진다.
다음 \(N\)개의 줄에는 객체 종류가 주어진다. 종류는 Transportation, Bus, Taxi 중 하나이다.
다음 줄에 명령 수 \(Q\)가 주어진다. 이어지는 \(Q\)개의 줄에는 다음 명령 중 하나가 주어진다.
move i distance: \(i\)번째 교통수단을distance만큼 이동시킨다.distance i: \(i\)번째 교통수단의 누적 이동 거리를 조회한다.fare i: \(i\)번째 교통수단의 현재 요금을 조회한다.\(1 \le N,Q \le 1,000\)
- \(1 \le distance \le 1,000,000,000\)
- \(1 \le i \le N\)
출력
distance와 fare 명령마다 반환값과 반환값의 자료형을 출력한다. move 명령은 아무것도 출력하지 않는다.
예제 입력 1
3
Transportation
Bus
Taxi
12
fare 1
fare 2
fare 3
move 2 7
fare 2
move 2 8
distance 2
fare 2
move 3 5
fare 3
move 1 5
fare 1
예제 출력 1
0
<class 'int'>
0
<class 'int'>
0
<class 'int'>
1500
<class 'int'>
15
<class 'int'>
2000
<class 'int'>
5500
<class 'int'>
500
<class 'int'>
예제 설명 1
처음에는 모든 객체의 이동 거리가 0이므로 세 요금 모두 0이다.
버스가 7만큼 이동하면 기본요금 1500이 적용된다. 이어서 8만큼 더 이동하면 누적 거리는 15이고, 기본 구간 10을 초과한 거리 5에 대한 요금 500이 추가되어 요금은 2000이다.
택시가 5만큼 이동하면 기본 구간 2를 초과한 거리 3에 대해 \(3 \times 500=1,500\)이 추가되므로 요금은 5500이다. 일반 교통수단이 5만큼 이동한 요금은 \(5 \times 100=500\)이다.
예제 입력 2
1
Bus
6
move 1 1
fare 1
move 1 9
fare 1
move 1 1
fare 1
예제 출력 2
1500
<class 'int'>
1500
<class 'int'>
1600
<class 'int'>
코멘트