Coding_Test 연습/SWEA

[SWEA] (C++) D3 1873 상호의 배틀필드

Codetesing 2022. 4. 8. 15:34

단순한 구현 문제이다.

case 나눠서 모두 확인해서 구현하면 되는 문제이다.

#include <iostream>

using namespace std;

int main(void)
{
    int t;
    cin >> t;

    for (int i = 1; i <= t; i++)
    {
        char map[20][20], cmd[100];
        int H, W, C, x, y;
        char state;
        cin >> H >> W;

        for (int j = 0; j < H; j++)
        {
            for (int k = 0; k < W; k++)
            {
                cin >> map[j][k];
                if (map[j][k] == '^' || map[j][k] == 'v' || map[j][k] == '<' || map[j][k] == '>')
                {
                    x = j;
                    y = k;
                    if (map[j][k] == '^')
                        state = 'U';
                    else if (map[j][k] == 'v')
                        state = 'D';
                    else if (map[j][k] == '<')
                        state = 'L';
                    else if (map[j][k] == '>')
                        state = 'R';
                }
            }
        }
        cin >> C;
        for (int j = 0; j < C; j++)
            cin >> cmd[j];
        for (int j = 0; j < C; j++)
        {
            if (cmd[j] == 'U')
            {
                state = 'U';
                if (x - 1 >= 0 && map[x - 1][y] == '.')
                {
                    map[x][y] = '.';
                    map[x - 1][y] = '^';
                    x -= 1;
                }
                else
                    map[x][y] = '^';
            }
            else if (cmd[j] == 'D')
            {
                state = 'D';
                if (x + 1 < H && map[x + 1][y] == '.')
                {
                    map[x][y] = '.';
                    map[x + 1][y] = 'v';
                    x += 1;
                }
                else
                    map[x][y] = 'v';
            }
            else if (cmd[j] == 'L')
            {
                state = 'L';
                if (y - 1 >= 0 && map[x][y - 1] == '.')
                {
                    map[x][y] = '.';
                    map[x][y - 1] = '<';
                    y -= 1;
                }
                else
                    map[x][y] = '<';
            }
            else if (cmd[j] == 'R')
            {
                state = 'R';
                if (y + 1 < W && map[x][y + 1] == '.')
                {
                    map[x][y] = '.';
                    map[x][y + 1] = '>';
                    y += 1;
                }
                else
                    map[x][y] = '>';
            }
            else if (cmd[j] == 'S')
            {
                if (state == 'U')
                {
                    for (int r = x - 1; r >= 0; r--)
                    {
                        if (map[r][y] == '*')
                        {
                            map[r][y] = '.';
                            break;
                        }
                        else if (map[r][y] == '#')
                            break;
                    }
                }
                else if (state == 'D')
                {
                    for (int r = x + 1; r < H; r++)
                    {
                        if (map[r][y] == '*')
                        {
                            map[r][y] = '.';
                            break;
                        }
                        else if (map[r][y] == '#')
                            break;
                    }
                }
                else if (state == 'L')
                {
                    for (int c = y - 1; c >= 0; c--)
                    {
                        if (map[x][c] == '*')
                        {
                            map[x][c] = '.';
                            break;
                        }
                        else if (map[x][c] == '#')
                            break;
                    }
                }
                else if (state == 'R')
                {
                    for (int c = y + 1; c < W; c++)
                    {
                        if (map[x][c] == '*')
                        {
                            map[x][c] = '.';
                            break;
                        }
                        else if (map[x][c] == '#')
                            break;
                    }
                }
            }
        }

        cout << "#" << i << " ";
        for (int j = 0; j < H; j++)
        {
            for (int k = 0; k < W; k++)
                cout << map[j][k];
            cout << endl;
        }
    }
    return 0;
}