알고리즘/SwExpert recipe

SWEA 상호의 배틀필드 [D3]

컵라면만두세트 2021. 2. 3. 15:11

 

 

package D3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class 내상호의배틀필드 {
	final static int RIGHT=0, LEFT =1, DOWN =2, UP=3;
	static int [][] arr;
	static int h,w,x,y,dir; 
	static StringBuilder sb;
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		for(int tc = 1; tc<=T; tc++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			//맵만들기
			h = Integer.parseInt(st.nextToken());
			w = Integer.parseInt(st.nextToken());
			arr = new int[h][w];
			
			for(int j=0; j<h; j++) {
				String t = br.readLine();
				for(int k=0; k<w; k++) {
					int temp = t.charAt(k);
					arr[j][k] = temp;
					if(temp!='.' && temp!='#' &&temp!='*' &&temp!='-') {
						x = j;
						y = k;
						if(temp == '<') dir = LEFT;
						else if(temp == '>') dir = RIGHT;
						else if(temp == '^') dir = UP;
						else if(temp == 'v') dir = DOWN;
					}
				}
			}
			int n = Integer.parseInt(br.readLine());
			String t = br.readLine();
			for(int j =0; j<n; j++) {
				switch(t.charAt(j)){
					case 'U':
						up();
						break; //이렇게 입력을 받으면 
					case 'D':
						down();
						break;
					case 'L':
						left();
						break;
					case 'R':
						right();
						break;
					case 'S':
						shoot();
						break;
				}
			}
			sb.append("#" +tc+ " ");
			for(int j=0; j<h; j++) {
				for(int k =0; k<w; k++)
					sb.append((char)arr[j][k]);
				sb.append("\n");
			}
			System.out.println(sb);
			
		}
		
	}
	private static void shoot() {
		switch(dir) {
		//벽돌깨기, #,*,- 화면 끝까지 가고 조건 확인
		case RIGHT:
			for(int i=y+1; i<w; i++) {
				if(arr[x][i]=='#')return;
				else if(arr[x][i]=='*') {
					arr[x][i]='.';
					return;
				}
			}
			break;
		case LEFT:
			for(int i = y-1; i>=0; i--) {
				if(arr[x][i]=='#') return;
				else if(arr[x][i]=='*') {
					arr[x][i]='.';
					return;
				}
			}
		case DOWN:
			for(int i =x+1; i<h; i++) {
				if(arr[i][y] == '#') return;
				else if(arr[i][y] == '*') {
					arr[i][y] = '.';
					return;
				}
			}
		case UP:
			for(int i =x-1; i>=0; i++) {
				if(arr[i][y]=='#') return;
				else if (arr[i][y]=='*') {
					arr[i][y]='.';
					return;
				}
			}
			break;
		}
		
	}
	// 오른쪽이동
	private static void right() {
		dir = RIGHT;
		arr[x][y] ='>';
		if(y+1>=w) return;
		if(arr[x][y+1]=='.') {
			arr[x][y++]='.'; // arr[x][y]
			
			arr[x][y]='>'; //arr[x][y+1] 이여도될까?
		}
	}
	private static void left() {
		dir = LEFT;
		arr[x][y] ='<';
		if(y-1<0)return;
		if(arr[x][y-1]=='.') {
			arr[x][y--]='.';
			arr[x][y]='<';
		}
		
	}
	private static void down() {
		dir =DOWN;
		arr[x][y] ='v';
		if(x+1>=h)return;
		if(arr[x+1][y]=='.') {
			arr[x++][y]='.';
			arr[x][y]='v';
		}
		
	}
	private static void up() {
		dir = UP;
		arr[x][y] = '^';
		if(x-1<0)return;
		if(arr[x-1][y]=='.') {
			arr[x--][y]='.';
			arr[x][y]='^';
					
		}
		
	}
	
	
	

}

'알고리즘 > SwExpert recipe' 카테고리의 다른 글

SWEA 계산기2 [D4]  (0) 2021.02.07
SWEA 평균값 구하기[D2]  (0) 2021.02.07
SWEA 쇠막대기자르기 [D4]  (0) 2021.02.06
SWEA 암호생성기 [D3]  (0) 2021.02.04
SWEA 최빈수출력 [D2]  (0) 2021.02.04