게임 캐릭터 클래스


답안 제출

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

문제 유형
허용된 언어
Python

공통 공격력을 관리하면서 캐릭터 종류에 따라 공격 결과가 달라지는 클래스들을 작성하시오.

미리 작성된 코드

다음 부모 클래스는 제출 코드 앞에 자동으로 추가된다. 부모 클래스는 제출하거나 다시 작성하지 않는다.

class Character:
    def __init__(self, power):
        self.power = power

    def change_power(self, amount):
        self.power += amount
        if self.power < 0:
            self.power = 0

    def get_power(self):
        return self.power

    def attack(self):
        return self.power

작성할 클래스

다음 자식 클래스만 작성한다.

class Warrior(Character):
    def attack(self):
        # 코드를 작성하세요.


class Mage(Character):
    def attack(self):
        # 코드를 작성하세요.
  • Character는 현재 공격력 power를 저장한다.
  • change_power(amount)는 공격력에 amount를 더한다. 결과가 0보다 작으면 공격력을 0으로 만든다.
  • get_power()는 현재 공격력을 int로 반환한다.
  • Character.attack()은 현재 공격력을 반환한다.
  • Warrior.attack()은 현재 공격력의 2배를 반환한다.
  • Mage.attack()은 현재 공격력에 50을 더한 값을 반환한다.

클래스를 사용하는 코드

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

n = int(input())
characters = []

for _ in range(n):
    character_type, power = input().split()
    power = int(power)
    if character_type == "Character":
        characters.append(Character(power))
    elif character_type == "Warrior":
        characters.append(Warrior(power))
    else:
        characters.append(Mage(power))

q = int(input())

for _ in range(q):
    command = input().split()
    character = characters[int(command[1]) - 1]

    if command[0] == "change":
        character.change_power(int(command[2]))
    elif command[0] == "power":
        result = character.get_power()
        print(result)
        print(type(result))
    else:
        result = character.attack()
        print(result)
        print(type(result))

위 코드가 정상적으로 동작하도록 작성할 자식 클래스의 정의 전체만 제출한다. 미리 작성된 부모 클래스, 입력을 받는 코드, 객체를 생성하는 코드는 제출하지 않는다.

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

입력

첫째 줄에 객체 수 \(N\)이 주어진다. 다음 \(N\)개의 줄에는 Character, Warrior, Mage 중 하나와 초기 공격력 power가 주어진다.

다음 줄에 명령 수 \(Q\)가 주어진다. 이어지는 줄에는 다음 명령 중 하나가 주어진다.

  • change i amount: \(i\)번째 캐릭터의 공격력을 변경한다.
  • power i: \(i\)번째 캐릭터의 현재 공격력을 조회한다.
  • attack i: \(i\)번째 캐릭터로 공격한다.

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

  • \(0 \le power \le 1,000,000,000\)
  • \(-1,000,000,000 \le amount \le 1,000,000,000\)
  • \(1 \le i \le N\)

출력

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

예제 입력 1

3
Character 100
Warrior 100
Mage 100
6
attack 1
attack 2
attack 3
change 2 20
attack 2
power 2

예제 출력 1

100
<class 'int'>
200
<class 'int'>
150
<class 'int'>
240
<class 'int'>
120
<class 'int'>

예제 설명 1

초기 공격력이 모두 100일 때 일반 캐릭터의 공격 결과는 100, 전사는 그 2배인 200, 마법사는 50을 더한 150이다.

두 번째 객체인 전사의 공격력을 20 증가시키면 현재 공격력은 120이 된다. 이후 전사의 공격 결과는 \(120 \times 2=240\)이다. change는 상태만 변경하므로 출력하지 않는다.

예제 입력 2

1
Character 0
2
power 1
attack 1

예제 출력 2

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

코멘트

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