문제
정올게임즈 대표 최강정올입니다.
저희는 현재 다수의 플레이어가 동시에 참여하는 생존 서바이벌 게임 “정올그라운드”를 개발 중입니다.
작년에는 Series B 투자를 200억 원 규모로 유치했으며, 곧 30억 원 규모의 후속 투자 유치가 예정되어 있습니다.
게임 시뮬레이션 개요
플레이어 정보
각 플레이어는 이름(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)이 되며, 이후 행동(공격·피격)에서 제외됩니다.
경기 진행
N명의 플레이어가 참가하며(1 ≤ N ≤ 100), 최대 100,000턴 동안 다음을 반복합니다:
살아있는 모든 플레이어 쌍
(i, j) 에 대해i ≠ j 이고 두 플레이어 모두 생존인 경우,players[i].attack(players[j])실행공격 직후 B가 사망하면 생존자 수 감소
한 턴 내에서의 공격 순서는
i=0→N-1,\ j=0→N-1 순차 처리합니다.생존자가 1명 이하가 되면 즉시 시뮬레이션을 종료합니다.
만약 100,000턴이 모두 소진되어도 2명 이상 생존 중이라면, 남은 플레이어 중 HP가 가장 높은 한 명을 최종 우승자로 선정합니다.
요구사항: Player 클래스 설계
아래 메서드와 속성을 반드시 구현하고, 내부 속성은 캡슐화( private )하세요.
메서드 시그니처 | 설명 |
|---|---|
| 기본 생성자 (더미 플레이어용) |
| 이름·체력·공격력·방어력 지정 생성자 |
| 플레이어 이름 반환 |
| 현재 체력 반환 |
| 공격력 반환 |
| 방어력 반환 |
| 체력 > 0 이면 true, 아니면 false |
| 위의 공식에 따라 |
| HP를 |
| 다음 형식으로 정보 출력: HP: 남체력 ATK: 공격력 |

주의:
모든 속성(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