만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

RPG Extreme

시간 제한5초메모리 제한1024 MB

요약
격자 던전에서 영웅이 명령 문자열 S에 따라 이동하며 몬스터와 싸우고 아이템을 모은 뒤, 최종 격자와 보스 처치 여부를 출력하는 시뮬레이션입니다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

요즘 택희는 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번째 줄에는 문제 설명에 나온 형식대로 게임의 결과를 출력한다.

예제 중 처음 세 개는 가능한 세 가지 게임 결과의 출력 형식을 모두 보여 주므로 참고하면 좋다.

예제5

  1. 예제 1

    입력
    7 8
    .&....&.
    ..B.&..&
    B...&...
    .B@.B#..
    .&....M.
    .B...B..
    ..B^^&..
    RRRUULLULUDDDLDRDRDRRRURRULUULLU
    3 5 One 4 2 10 3
    2 5 Two 10 2 8 3
    1 2 Three 20 2 14 7
    5 2 Four 16 2 16 5
    7 6 Five 16 5 16 12
    5 7 Boss 2 9 20 2
    1 7 EO 20 1 1 4
    2 8 ET 10 5 4 10
    4 5 W 4
    2 3 O CO
    3 1 A 10
    4 2 A 2
    6 2 O DX
    7 3 O HU
    6 6 W 3
    
    예상 출력
    ......&.
    .......&
    B.......
    .....#..
    ......@.
    ........
    ...^^...
    Passed Turns : 27
    LV : 3
    HP : 29/30
    ATT : 6+3
    DEF : 6+2
    EXP : 14/15
    YOU WIN!
    
  2. 예제 2

    입력
    6 6
    BBBB^&
    ....&.
    &...BB
    B.B#.&
    B&.@#B
    ...#MB
    UURRDDURDLRRLLLDUULUUUURRRLRRDLDRRDDDLRRD
    5 2 One 2 2 19 4
    3 1 Two 2 2 12 2
    2 5 Three 4 5 16 9
    4 6 Four 20 13 20 8
    6 5 Boss 10 20 11 20
    1 6 Etc 20 20 20 20
    1 1 O EX
    1 2 O CU
    1 3 O CO
    1 4 O CU
    3 5 O DX
    3 6 O RE
    4 1 A 10
    5 1 W 10
    4 3 W 5
    5 6 W 1
    6 6 A 1
    
    예상 출력
    ....^&
    ......
    ......
    ..B#..
    ....#.
    ...#M.
    Passed Turns : 38
    LV : 3
    HP : 0/30
    ATT : 6+1
    DEF : 6+1
    EXP : 9/15
    YOU HAVE BEEN KILLED BY Boss..
    
  3. 예제 3

    입력
    6 6
    @.BB.M
    ..##B.
    BB....
    ##.###
    &&.&&&
    &#..#&
    RRRRRDDRRDDLLDURRRRRDULLLUURRRU
    1 6 Boss 20 20 20 20
    5 2 One 5 2 2 5
    5 1 Two 5 4 6 6
    6 1 Three 5 4 10 6
    5 4 Four 8 4 8 7
    5 5 Five 8 4 8 10
    5 6 Six 3 3 10 20
    6 6 Seven 8 8 1 4
    1 3 O RE
    1 4 O HR
    3 1 W 2
    3 2 A 2
    2 5 A 10
    
    예상 출력
    .....M
    ..##B@
    ......
    ##.###
    ......
    .#..#.
    Passed Turns : 31
    LV : 5
    HP : 40/40
    ATT : 10+2
    DEF : 10+2
    EXP : 4/25
    Press any key to continue.
    
  4. 예제 4

    입력
    5 5
    B^^#M
    ^^^#.
    &^@##
    ^^^^#
    ^^^^^
    UULLDDDDRRRRULUULUUULDDDDLUUURRRDDRR
    1 5 Boss 10 5 2 3
    3 1 Easy 1 1 1 10
    1 1 O DX
    
    예상 출력
    .^^#M
    ^^^#.
    .^.##
    ^^^^#
    ^^^^^
    Passed Turns : 34
    LV : 2
    HP : 0/25
    ATT : 4+0
    DEF : 4+0
    EXP : 0/10
    YOU HAVE BEEN KILLED BY SPIKE TRAP..
    
  5. 예제 5

    입력
    5 5
    B^^#M
    ^^^#.
    &^@##
    ^^^^#
    ^^^^^
    UULLDDDDRRRRULUULUUULDDDDLUUURRRDDRR
    1 5 Boss 10 5 2 3
    3 1 Easy 1 1 1 10
    1 1 O RE
    
    예상 출력
    .^^#M
    ^^^#.
    &^.##
    ^^^^#
    ^^^^^
    Passed Turns : 9
    LV : 1
    HP : 0/20
    ATT : 2+0
    DEF : 2+0
    EXP : 0/5
    YOU HAVE BEEN KILLED BY SPIKE TRAP..