https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc&
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// TODO: https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc&categoryId=AV5LyE7KD2ADFAXc&categoryType=CODE
public class Solution {
static int T, R, C;
static char[][] map;
static char[] command;
static Tank tank;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
//BufferedReader br = new BufferedReader(new StringReader(src));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
StringTokenizer tokens = new StringTokenizer(br.readLine());
sb=new StringBuilder();
R = Integer.parseInt(tokens.nextToken());
C = Integer.parseInt(tokens.nextToken());
tank = null;
map = new char[R][C];
for (int r = 0; r < R; r++) {
map[r] = br.readLine().toCharArray();
if (tank == null) {
for (int c = 0; c < C; c++) {
char info = map[r][c];
if (info == '^' || info == 'v' || info == '<' || info == '>') {
tank = new Tank(r, c);
break;
}
}
}
}
br.readLine();// 버림
command = br.readLine().toCharArray();
for (char c : command) {
switch (c) {
case 'S':
switch (tank.d) {
case '^':
for (int i = tank.r - 1; i >= 0; i--) {
if(shotEffect(i, tank.c)) {
break;
}
}
break;
case 'v':
for (int i = tank.r + 1; i < R; i++) {
if(shotEffect(i, tank.c)) {
break;
}
}
break;
case '>':
for (int i = tank.c + 1; i < C; i++) {
if(shotEffect(tank.r, i)) {
break;
}
}
break;
default:
for (int i = tank.c - 1; i >= 0; i--) {
if(shotEffect(tank.r, i)) {
break;
}
}
}
break;
case 'U':
go(tank.r - 1, tank.c, '^');
break;
case 'D':
go(tank.r + 1, tank.c, 'v');
break;
case 'L':
go(tank.r, tank.c - 1, '<');
break;
case 'R':
go(tank.r, tank.c + 1,'>');
break;
}
}
sb.append("#").append(t).append(" ");
for (char[] row : map) {
for (char c : row) {
sb.append(c);
}
sb.append("\n");
}
System.out.print(sb);
}
}
static boolean shotEffect(int r, int c) {
boolean isOver = false;
char info = map[r][c];
if (info == '*') {
map[r][c] = '.';
isOver = true;
} else if (info == '#') {
isOver = true;
}
return isOver;
}
static void go(int r, int c, char d) {
map[tank.r][tank.c] = tank.d = d; // 방향 표시 후
if (0 <= r && 0 <= c && r < R && c < C && map[r][c] == '.') { // 갈 수 있다면 가기
map[tank.r][tank.c] = '.';
tank.r = r;
tank.c = c;
map[tank.r][tank.c] = tank.d;
}
}
static class Tank {
int r, c;
char d;
public Tank(int r, int c) {
this.r = r;
this.c = c;
d = map[r][c];
}
}
private static String src = "1\r\n" +
"3 7\r\n" +
"***....\r\n" +
"*-..#**\r\n" +
"#<.****\r\n" +
"23\r\n" +
"SURSSSSUSLSRSSSURRDSRDS";
}