페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#5207
인터랙티브
언어 제한

정올게임즈-정올그라운드2 (클래스) 1s 128MB

문제

정올게임즈 대표 최강정올입니다.

저희 첫 작품인 “정올그라운드”는 고티(Game of the Year) 수상과 함께

당초 예정된 30억 원 규모 후속 투자를 성공적으로 유치했습니다.

이 모든 성공은 개발자 여러분께서 Player 클래스를 완벽하게 구현해 주신 덕분입니다.

기쁜 소식! 이제 두 번째 시리즈, “정올그라운드2” 개발을 시작합니다.

1. 기본 게임 메커니즘 (기존과 동일)

  • 플레이어 속성

    • 이름(name), 체력(HP), 공격력(ATK), 방어력(DEF)

    • 기본 생성자(Player()) → name=None, HP=0, ATK=0, DEF=0 (더미 데이터용)

  • 공격 로직

    • 플레이어 A가 B를 공격하면

      def attack(self,other):
          other.reduce_hp( self.get_atk() - (self.get_atk() / 100 * other.get_def()) )
    • HP가 0이 되면 즉시 사망(dead)

  • 시뮬레이션 흐름

    1. N명의 플레이어 참가 (1 ≤ N ≤ 100)

    2. 최대 100,000턴 동안 반복:

      • 살아있는 모든 (i, j) 쌍에 대해 players[i].attack(players[j])

      • 공격 후 사망자 생존자 수 차감

      • 생존자가 1명 이하가 되면 즉시 종료

    3. 100,000턴 종료 시에도 2명 이상 살아있다면, 남은 플레이어 중 HP가 가장 높은 1인을 우승자로 선정


2. “정올그라운드2”에서 추가된 요소

  1. 민첩성(Dexterity) 속성 추가

    • 각 플레이어는 dex (int) 값을 추가로 가집니다.

  2. 공격 제한 규칙

    • 공격자(self)의 민첩성이 대상(other)의 민첩성보다 절반 미만(즉, other.dex ≥ self.dex × 2)인 경우,
      해당 대상에 대한 attack() 호출 시 아무 일도 일어나지 않습니다.

    • 반대로, self.dex * 2 > other.dex 일 때만 실제 대미지를 계산해 적용합니다.


3. 요구사항: NewPlayer 클래스 설계

  • 기존 Player 클래스를 상속(inheritance) 하여 구현

  • 속성 은닉(private)과 접근자(getter) 사용

  • 추가 속성:

    private __dex: int
  • 반드시 구현할 메서드

    class NewPlayer(Player):
        def __init__(self, name=None, hp=0, atk=0, defe=0, dex=0):
            super().__init__(name, hp, atk, defe)
            self.__dex = dex
    
        def get_dex(self) -> int:
            # 민첩성 반환
            ...
    
        def attack(self, other: Player) -> None:
            # 공격 제한 규칙 적용 후, super().attack(other) 호출
            ...
  • 기존 Player 메서드 (get_name(), get_hp(), get_atk(), get_def(), reduce_hp(), is_alive(), print_info())는 모두 재사용 가능

기존 클래스 Player와 상속받은 새로운 클래스 NewPlayer를 함께 제출해주시길 바랍니다.

감사합니다. 


입력

이름의 길이는 100자를 넘지 않고, 각 정수 속성들은 int의 범위 내에 속한 값만 입력된다.​


출력

마지막까지 생존한 플레이어의 정보가 아래와 같이 출력된다.

그 다음 줄부터 이름, 남은 체력, 공격력, 방어력이 각각 출력된다.


예제

5

John 140 10 50 1
Bob 140 20 40 2
Chris 140 30 30 3
David 140 40 20 4
Eric 140 50 10 5
<< David >>
HP: 12
ATK: 40
DEF: 20


출처

klee

로그인해야 코드를 작성할 수 있어요.