Overdose Runner
시간 제한2초메모리 제한1024 MB
격자판에서 플레이어가 이동, 공격, 약 복용 행동을 순서대로 실행한 뒤 최종 레벨, 경험치, 보드 상태를 출력합니다.
문제
스킵이는 신작 게임 Overdose Runner를 플레이하고 있다. 게임의 목표는 플레이어를 특정 지점에 도착시키는 것이다. 이 게임은 크기의 2차원 좌표계로 나타낼 수 있다. 좌표 안에는 플레이어, 빈칸, 몬스터, 장애물, 목적지가 있다. 플레이어에게는 공격력, 공격 사거리, 이동속도, 레벨, 경험치, 요구 경험치라는 여섯 가지 능력치가 있다. 플레이어는 행동력을 소모해 다음 행동을 할 수 있다.
- 순간이동은 행동력 1을 소모해 상하좌우 중 한 방향으로 정확히 칸 떨어진 위치로 이동한다. 이때 는 캐릭터의 이동속도다. 이동할 위치가 좌표 범위 밖이거나 장애물 또는 몬스터가 있으면 움직일 수 없다.
- 대기는 행동력 1을 소모하고 아무 행동도 하지 않는다.
- 공격은 행동력 3을 소모해 상하좌우 중 한 방향으로 투사체를 발사한다. 투사체는 발사된 방향으로 공격 사거리만큼 한 칸씩 나아간다. 투사체가 몬스터와 같은 위치에 오면 몬스터의 체력이 (플레이어의 공격력 - 몬스터의 방어력)만큼 줄어든다. 단, 플레이어의 공격력이 몬스터의 방어력보다 낮으면 몬스터의 체력은 줄지 않는다. 이 행동으로 몬스터의 체력이 0 이하가 되면 그 자리는 빈칸이 되고 플레이어는 경험치를 얻는다. 투사체가 다음에 이동할 좌표에 장애물이 있으면 투사체는 사라진다. 투사체가 사라진 뒤에 다음 행동을 처리한다. 투사체는 장애물 외의 다른 물체를 만나도 사라지거나 멈추지 않는다.
- 약 먹기는 행동력 2를 소모해 이동속도를 1 늘리거나 줄이는 약을 먹는다. 이동속도가 0이면 음수로 내려가지 않는다. 이동속도가 0이어서 변하지 않더라도 행동력 2는 그대로 소모된다. 약을 5번 먹을 때마다 OVERDOSE 상태가 된다. OVERDOSE 상태에서는 순간이동과 대기를 제외한 다른 행동을 할 수 없다. OVERDOSE 상태가 된 뒤 행동력을 10 이상 소모하면 OVERDOSE 상태가 해제된다.
- 클리어는 행동력 0을 소모한다. 플레이어가 목적지와 같은 좌표에 있으면 스테이지를 클리어한다. 클리어한 뒤에는 캐릭터가 다른 행동을 할 수 없다.
한 행동이 끝난 뒤 얻은 경험치가 요구 경험치 이상이 되면, 경험치가 요구 경험치보다 작아질 때까지 레벨이 오른다. 레벨이 오를 때마다 경험치에서 요구 경험치만큼 뺀다.
캐릭터는 공격력 5, 공격 사거리 1, 이동속도 1, 요구 경험치 10, 경험치 0, 레벨 1로 게임을 시작한다. 레벨이 일 때 레벨이 오르면 레벨은 이 되고, 공격력은 만큼, 공격 사거리는 1만큼, 요구 경험치는 10만큼 증가한다.
스킵이가 한 행동이 차례대로 주어진다. 불가능한 행동이면 게임은 그 행동을 무시하고 다음 행동을 실행한다. 이때 행동력은 소모되지 않는다. 모든 행동을 실행한 뒤 게임 화면을 출력한다.
입력
첫 번째 줄에 , 이 공백으로 구분되어 주어진다.
다음 개의 줄에는 초기 게임 상태를 나타내는 개의 문자가 주어진다. p는 플레이어, .은 빈칸, m은 몬스터, *은 장애물, g는 목적지다. p와 g는 각각 하나만 주어지고, m은 하나 이상 주어진다. 좌표가 또는 이거나 좌표가 또는 인 칸에는 장애물이 있다고 보장된다.
다음 줄에는 몬스터의 수 가 주어진다. 는 입력에 주어진 m의 개수와 같다.
번째 몬스터는 좌표로 정렬했을 때 번째에 오는 몬스터다. 두 몬스터의 좌표가 같으면 좌표가 작은 쪽이 먼저 오고, 다르면 좌표가 작은 쪽이 먼저 온다.
다음 줄에는 각 몬스터의 체력 가 공백으로 구분되어 주어진다.
다음 줄에는 각 몬스터의 방어력 가 공백으로 구분되어 주어진다.
다음 줄에는 각 몬스터의 체력을 0 이하로 만들었을 때 얻는 경험치 가 공백으로 구분되어 주어진다.
좌표는 맵의 왼쪽 위가 , 오른쪽 아래가 이다.
다음 줄에는 스킵이가 한 행동의 수 가 주어진다.
마지막 줄에는 스킵이가 한 행동이 공백으로 구분되어 주어진다. u는 위로 순간이동, d는 아래로 순간이동, l은 왼쪽으로 순간이동, r은 오른쪽으로 순간이동, w는 대기, au는 위로 공격, ad는 아래로 공격, al은 왼쪽으로 공격, ar은 오른쪽으로 공격, du는 약 먹기(이동속도 1 증가), dd는 약 먹기(이동속도 1 감소), c는 클리어다.
출력
첫 번째 줄에 레벨과 경험치를 공백으로 구분해 출력한다.
다음 줄에 스킵이가 사용한 행동력의 합을 출력한다.
다음 개의 줄에 모든 행동이 끝난 뒤의 게임판을 입력 형식에 맞춰 출력한다. 플레이어와 목적지가 같은 위치에 있었다면 p만 출력한다.
다음 줄에 남아 있는 몬스터의 체력을 입력과 같은 순서로 공백으로 구분해 출력한다. 남아 있는 몬스터가 하나도 없으면 이 줄은 출력하지 않는다.