[알고리즘/SWEA] #1873 상호의 배틀필드

JudyLia·2022년 2월 4일
0

알고리즘

목록 보기
15/61
post-thumbnail

문제)

상호의 배틀 필드

  • java
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());
			
		}

	}
	
}

profile
안녕:)

0개의 댓글

관련 채용 정보