문제)
package algorithm_lab.day02.q3;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws NumberFormatException, IOException {
System.setIn(new FileInputStream("./src/algorithm_lab/day02/q3/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testcase=Integer.parseInt(br.readLine());
for(int t=1;t<testcase+1;t++) {
String[] size=br.readLine().split(" ");
int h=Integer.parseInt(size[0]);
int w=Integer.parseInt(size[1]);
//map 생성
char[][] map= new char[h][w];
//map에 값 넣기
for(int i=0;i<h;i++) {
String s=br.readLine();
map[i]=s.toCharArray();
}
//명령 횟수 받기
int cnt=Integer.parseInt(br.readLine());
//명령 받아서 배열에 넣기
String[] order=new String[cnt];
order=br.readLine().split("");
//현재 전차의 위치 확인
int x=0, y=0;
for(int i=0;i<h;i++) {
for(int j=0;j<w;j++) {
if(map[i][j]=='<'||map[i][j]=='>'||map[i][j]=='^'||map[i][j]=='v') {
x=i;
y=j;
break;
}
}
}
//명령 배열을 돌면서 U,D,L,R,S 수행
for(int i=0;i<cnt;i++) {
String ord=order[i];
if(ord.equals("U")) {
if(x-1>=0&&map[x-1][y]=='.') {
map[x-1][y]='^';
map[x][y]='.';
x-=1;
}
map[x][y]='^';
}else if(ord.equals("D")) {
if(x+1<h&&map[x+1][y]=='.') {
map[x+1][y]='v';
map[x][y]='.';
x+=1;
}
map[x][y]='v';
}else if(ord.equals("L")) {
if(y-1>=0&&map[x][y-1]=='.') {
map[x][y-1]='<';
map[x][y]='.';
y-=1;
}
map[x][y]='<';
}else if(ord.equals("R")) {
if(y+1<w&&map[x][y+1]=='.') {
map[x][y+1]='>';
map[x][y]='.';
y+=1;
}
map[x][y]='>';
}else if(ord.equals("S")) {
//전차가 바라보는 방향 확인
char dir=map[x][y];
//해당 방향으로 포탄 날릴 때
if(dir=='^') {
for(int j=x;j>=0;j--) {
if(map[j][y]=='*') {
map[j][y]='.';
break;
}else if(map[j][y]=='#') {
break;
}
}
}else if(dir=='v') {
for(int j=x;j<h;j++) {
if(map[j][y]=='*') {
map[j][y]='.';
break;
}
else if(map[j][y]=='#') {
break;
}
}
}else if(dir=='>') {
for(int j=y;j<w;j++) {
if(map[x][j]=='*') {
map[x][j]='.';
break;
}else if(map[x][j]=='#') {
break;
}
}
}else if(dir=='<') {
for(int j=y;j>=0;j--) {
if(map[x][j]=='*') {
map[x][j]='.';
break;
}else if(map[x][j]=='#') {
break;
}
}
}
}
}
//출력하기
StringBuilder sb=new StringBuilder();
sb.append("#").append(t).append(" ");
for(int i=0;i<h;i++) {
for(int j=0;j<w;j++) {
sb.append(map[i][j]);
}
sb.append("\n");
}
System.out.print(sb.toString());
}
}
}