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

#5206
인터랙티브
언어 제한

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

문제

정올게임즈 대표 최강정올입니다.
저희는 현재 다수의 플레이어가 동시에 참여하는 생존 서바이벌 게임 “정올그라운드”를 개발 중입니다.
작년에는 Series B 투자를 200억 원 규모로 유치했으며, 곧 30억 원 규모의 후속 투자 유치가 예정되어 있습니다.

게임 시뮬레이션 개요

  1. 플레이어 정보

    • 각 플레이어는 이름(name), 체력(HP), 공격력(ATK), 방어력(DEF) 속성을 가집니다.

    • 기본 생성자(Player())를 호출하면,

      name = None  
      HP   = 0  
      ATK  = 0  
      DEF  = 0  

      으로 초기화됩니다. 이는 더미 데이터(예: 테스트 코드) 생성 시 사용됩니다.

  2. 공격 로직

    • 플레이어 A가 플레이어 B를 공격하면 아래와 같이 계산합니다.

      def attack(self,other):
          other.reduce_hp( self.get_atk() - (self.get_atk() / 100 * other.get_def()) )
    • 플레이어의 HP가 0이면 즉시 사망(dead)이 되며, 이후 행동(공격·피격)에서 제외됩니다.

  3. 경기 진행

    • N명의 플레이어가 참가하며(1 ≤ N ≤ 100), 최대 100,000턴 동안 다음을 반복합니다:

      1. 살아있는 모든 플레이어 쌍 (i, j)에 대해 i ≠ j 이고 두 플레이어 모두 생존인 경우,

      2. players[i].attack(players[j]) 실행

      3. 공격 직후 B가 사망하면 생존자 수 감소

    • 한 턴 내에서의 공격 순서는 i=0→N-1,\ j=0→N-1 순차 처리합니다.

    • 생존자가 1명 이하가 되면 즉시 시뮬레이션을 종료합니다.

    • 만약 100,000턴이 모두 소진되어도 2명 이상 생존 중이라면, 남은 플레이어 중 HP가 가장 높은 한 명을 최종 우승자로 선정합니다.

요구사항: Player 클래스 설계

아래 메서드와 속성을 반드시 구현하고, 내부 속성은 캡슐화( private )하세요.

메서드 시그니처

설명

Player()

기본 생성자 (더미 플레이어용)

Player(name, hp, atk, def)

이름·체력·공격력·방어력 지정 생성자

get_name() → string

플레이어 이름 반환

get_hp() → int

현재 체력 반환

get_atk() → int

공격력 반환

get_def() → int

방어력 반환

is_alive() → bool

체력 > 0 이면 true, 아니면 false

attack(other: Player) → void

위의 공식에 따라 other를 공격

reduce_hp(amount: int) → void

HP를 amount만큼 감소 (HP 하한은 0으로 제한)

print_info() → void

다음 형식으로 정보 출력:
<< 이름 >>

HP: 남체력

ATK: 공격력
DEF: 방어력

 주의:

  • 모든 속성(name, HP, ATK, DEF)은 외부에서 직접 접근 불가능해야 합니다.

  • 소수점 연산 시 반드시 내림 처리하세요.

  • HP가 음수가 되지 않도록 reduce_hp 내부에서 최소 0으로 고정해야 합니다.

위의 형식에 맞는 클래스 Player를 제출해주시길 바랍니다.
감사합니다.  


입력

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


출력

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

첫 줄에 "<< 이름 >>" 형식으로 이름이 출력되고,

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


예제 #1

5

John 40 10 50
Bob 40 20 40
Chris 40 30 30
David 40 40 20
Eric 40 50 10
<< Bob >>
HP: 4
ATK: 20
DEF: 40

예제 #2

5

John 500 10 50
Bob 500 20 40
Chris 500 30 30
David 500 40 20
Eric 500 50 10
<< John >>
HP: 20
ATK: 10
DEF: 50


출처

klee

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