RPG Extreme
시간 제한5초메모리 제한1024 MB
격자 던전에서 영웅이 명령 문자열 S에 따라 이동하며 몬스터와 싸우고 아이템을 모은 뒤, 최종 격자와 보스 처치 여부를 출력하는 시뮬레이션입니다.
문제

요즘 택희는 RPG 게임을 하고 있다. 던전을 헤쳐 나가며 몬스터를 물리치고, 아이템을 모으고, 레벨을 올려 보스 몬스터를 물리치는 전형적인 RPG 게임이다.
이 게임은 N×M 2차원 그리드 위에서 진행되며, 그리드의 각 칸에는 다음 중 하나가 있을 수 있다.
- 빈 칸(.): 자유롭게 들어갈 수 있는 칸이다. 주인공(@)은 처음에 빈 칸에서 시작한다.
- 벽(#): 막힌 칸이다. 이 칸으로는 움직일 수 없다.
- 아이템 상자(B)
- 아이템 상자에는 장비 한 가지가 들어 있다.
- 장비는 무기(W), 갑옷(A), 장신구(O) 세 종류로 나뉘며, 알파벳 대문자는 해당 종류의 이름이다.
- 아이템 상자를 열어 장비를 얻으면, 무기와 방어구는 얻은 장비로 교체된다. 장신구는 착용할 수 있는 칸이 남아 있고 같은 효과의 장신구를 이미 착용하고 있지 않을 때에만 착용한다. 장신구는 아래 주인공 설명에서 자세히 다룬다.
- 아이템 상자를 열고 나면 그 칸은 빈 칸이 된다. 주인공은 상자를 연 뒤 상자가 있던 칸으로 이동한다.
- 가시 함정(^)
- 가시 함정을 밟으면 5의 데미지를 입는다. 이 데미지로 사망할 수도 있다.
- 함정은 밟아도 사라지지 않는다.
- 함정 위에서 입력된 방향으로 움직이지 못해 제자리에 멈추면, 그 함정을 다시 밟은 것으로 본다.
- 몬스터(&)
- 몬스터는 알파벳 대소문자로 된 이름과, 정수로 표시되는 공격력, 방어력, 체력, 쓰러뜨렸을 때 얻는 경험치를 가진다.
- 몬스터가 있는 칸에 들어가면 전투가 벌어진다. 주인공이 항상 먼저 공격하며, 두 쪽이 번갈아 공격해 서로에게 max(1, 내 공격력 - 상대의 방어력)만큼의 데미지를 한 번씩 입힌다. 한쪽의 체력이 0 이하가 되면 전투는 즉시 끝난다.
- 몬스터가 죽으면 그 칸은 빈 칸이 된다. 주인공이 이기면 그 칸으로 이동한다.
- 전투가 시작되어 캐릭터나 몬스터가 죽을 때까지의 모든 과정은 한 턴 안에 이루어진다.
- 보스 몬스터(M)
- 일반 몬스터와 같다. 게임의 목표는 보스 몬스터를 처치하는 것이다.
주인공은 처음에 빈 칸 하나에서 시작한다. 주인공의 정보는 다음과 같다.
- 체력, 공격력, 방어력은 정수로 표시된다. 초기값은 체력 20, 공격력 2, 방어력 2이다.
- 경험치: 처음에는 레벨 1이다. 레벨 N에서 N+1이 되려면 5×N의 경험치가 필요하다.
- 레벨이 오르면 최대 체력이 5, 공격력과 방어력이 각각 2씩 오르고, 이후 체력이 모두 회복된다.
- 경험치를 얻어 레벨이 오르면 남은 경험치는 버린다. 예를 들어 다음 레벨까지 3이 필요한 상태에서 5의 경험치를 얻으면, 레벨이 오른 뒤 남은 2는 버려지고 경험치는 0이 된다.
- 무기: 한 개만 착용할 수 있다. 각 무기는 공격력 값을 가지며, 이 값이 주인공의 공격력에 더해진다.
- 무기의 공격력은 다른 모든 공격력 상승 효과보다 먼저 적용된다. 즉, 다른 공격력 상승 효과는 무기의 공격력까지 함께 올린다.
- 방어구: 한 개만 착용할 수 있다. 각 방어구는 방어력 값을 가지며, 이 값이 주인공의 방어력에 더해진다.
- 장신구: 최대 4개까지 착용할 수 있지만, 같은 효과의 장신구는 하나까지만 착용할 수 있다. 장신구의 효과는 다음과 같다.
- HP Regeneration(HR): 전투에서 이길 때마다 체력을 3 회복한다. 체력은 최대 체력까지만 회복된다.
- Reincarnation(RE): 주인공이 사망하면 소멸한다. 이때 주인공을 최대 체력으로 부활시키고 처음 시작 위치로 돌려보낸다. 레벨이나 장비 같은 다른 정보는 그대로다. 전투 중이던 몬스터가 있으면 그 몬스터의 체력도 최대치로 회복된다. 소멸한 뒤 이 장신구를 다시 얻으면 다시 착용한다.
- Courage(CO): 모든 전투에서 첫 번째 공격의 공격력(무기 포함)이 두 배로 적용된다. 즉, 모든 첫 공격에서 몬스터에게 max(1, 공격력×2 - 몬스터의 방어력)만큼의 데미지를 입힌다.
- Experience(EX): 얻는 경험치가 1.2배가 된다. 소수점 아래는 버린다.
- Dexterity(DX): 가시 함정에서 입는 데미지가 1로 고정된다. Courage와 함께 착용하면 Courage의 공격력 효과가 두 배 대신 세 배로 적용된다.
- Hunter(HU): 보스 몬스터와 전투에 들어가는 순간 체력을 최대치까지 회복한다. 보스 몬스터의 첫 공격에는 0의 데미지를 입는다.
- Cursed(CU): 아무 능력이 없으며, 장신구 한 자리를 차지한다.
주인공의 한 턴은 다음 순서로 진행된다.
- 주인공이 상하좌우로 한 칸 이동한다.
- 그 칸이 빈 칸이면 아무 일 없이 지나간다. 아이템 상자, 가시 함정, 몬스터, 보스 몬스터가 있으면 위에서 설명한 대로 행동한다.
주인공은 상하좌우로 한 칸씩 이동할 수 있다. 이동 명령은 L, R, U, D로 이루어진 문자열 하나로 미리 모두 주어진다. L은 왼쪽, R은 오른쪽, U는 위, D는 아래다. 움직일 수 없는 명령(벽으로 들어가거나 그리드 밖으로 나가는 명령 등)이 주어지면 제자리에 머문다.
게임은 보스 몬스터를 처치하거나, 주인공이 (전투 또는 가시 함정으로) 체력이 0 이하가 되어 죽거나, 입력된 문자열의 모든 명령을 마쳤을 때 끝난다. 보스 몬스터를 처치해서 끝나는 경우에도 보스의 경험치를 얻고, 필요하면 레벨 업과 장신구 효과를 모두 처리한 뒤 끝난다. 입력이 남아 있는데 게임이 끝나면 남은 입력은 모두 무시한다. 게임이 끝나면 다음 순서로 결과를 출력한다.
- 그리드 상태: N줄에 M개의 문자로 출력한다.
- 주인공: @. 주인공이 있는 칸에 무엇이 있든(함정 등) @으로 출력한다. 사망하면 주인공은 그리드에서 사라진다. 즉, 패배한 게임에서는 @을 출력하지 않는다.
- 빈 칸: .
- 벽: #
- 보스가 아닌 몬스터(살아 있을 경우): &
- 보스 몬스터(살아 있을 경우): M
- 가시 함정: ^
- 아이템 상자(열리지 않았을 경우): B
- 진행된 턴 수 T: Passed Turns : T. 게임은 0턴에서 시작한다. 즉 첫 이동을 마친 뒤 게임이 끝나면 1턴이 지난 것이다.
- 종료 시점의 주인공 정보:
- LV : N. N은 현재 레벨이다.
- HP : REM/CUR. REM은 현재 체력, CUR은 최대 체력이다. 현재 체력이 0 미만이면 REM은 0이다.
- ATT : N+W. N은 무기를 적용하지 않은 주인공의 공격력이고, W는 착용 중인 무기의 공격력이다. 무기가 없으면 W는 0이다.
- DEF : N+A. N은 방어구를 적용하지 않은 주인공의 방어력이고, A는 착용 중인 방어구의 방어력이다. 방어구가 없으면 A는 0이다.
- EXP : CUR/MAX. CUR은 현재 경험치, MAX는 다음 레벨에 필요한 총 경험치다.
- 게임 결과:
- 보스 몬스터를 처치한 경우: YOU WIN!
- 사망한 경우: YOU HAVE BEEN KILLED BY S.. 전투로 사망했으면 S는 몬스터의 이름이고, 가시 함정으로 사망했으면 S는 "SPIKE TRAP"이다.
- 입력이 끝난 경우: Press any key to continue.
출력 예제를 보면 더 쉽게 이해할 수 있다. 각 아이템 상자의 내용물과 몬스터 정보는 모두 입력으로 주어지며, 입력 형식은 아래 입력 설명을 따른다.
입력
첫 줄에 그리드의 크기 N과 M이 주어진다. (1 ≤ N, M ≤ 100, 2 ≤ N×M)
다음 N줄에 걸쳐 M개의 문자로 그리드의 상태가 주어진다. 주어지는 문자는 모두 위 설명에 나온 것 중 하나다.
보스 몬스터 M과 주인공 @은 정확히 한 개씩 있다.
다음 줄에는 L, R, U, D로 이루어진 문자열 S가 주어진다. (1 ≤ |S| ≤ 5,000) 주인공은 S의 첫 글자부터 차례대로 실행한다.
그리드에 있는 몬스터의 수(보스 몬스터 포함)를 K라 하자. 다음 K줄에 걸쳐 각 몬스터의 정보가 아래 형식으로 주어진다.
- R C S W A H E (1 ≤ R ≤ N, 1 ≤ C ≤ M, 1 ≤ |S| ≤ 10, 1 ≤ W, A, H, E ≤ 20)
- R번째 줄, C번째 열에 있는 몬스터의 정보다. 이 칸에 몬스터가 있음이 보장된다.
- S는 몬스터의 이름으로, 알파벳 대소문자로만 이루어진 1글자 이상 10글자 이하의 문자열이다. 보스 몬스터를 포함해 모든 몬스터의 이름은 서로 다르다.
- W는 몬스터의 공격력, A는 방어력, H는 최대 체력, E는 쓰러뜨렸을 때 얻는 경험치다.
모든 몬스터의 정보는 정확히 한 번씩 주어진다.
이어서 그리드에 있는 아이템 상자의 수를 L이라 할 때, L줄에 걸쳐 각 상자의 정보가 아래 형식으로 주어진다.
- R C T S (1 ≤ R ≤ N, 1 ≤ C ≤ M, T는 W, A, O 중 하나)
- R번째 줄, C번째 열에 있는 아이템 상자의 정보다. 이 칸에 상자가 있음이 보장된다.
- T가 W 또는 A이면 S는 N(1 ≤ N ≤ 10)이다. T가 W이면 공격력이 N인 무기를, A이면 방어력이 N인 방어구를 뜻한다.
- T가 O이면 S는 HR, RE, CO, EX, DX, HU, CU 중 하나이며, 해당 효과를 가진 장신구를 뜻한다. 자세한 내용은 문제 설명을 참조한다.
모든 아이템 상자의 정보는 정확히 한 번씩 주어진다.
출력
게임이 끝난 시점의 그리드 최종 상태를 N줄에 걸쳐 M개의 문자로 출력한다.
N+1번째 줄에 진행된 턴 수를 Passed Turns : T 형식으로 출력한다.
N+2번째 줄부터 N+6번째 줄까지 주인공의 상태를 출력 예제의 형식대로 출력한다. 각 값의 의미는 문제 설명을 따른다.
N+7번째 줄에는 문제 설명에 나온 형식대로 게임의 결과를 출력한다.
예제 중 처음 세 개는 가능한 세 가지 게임 결과의 출력 형식을 모두 보여 주므로 참고하면 좋다.