본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

1873. 상호의 배틀필드 (자바, 코딩테스트, SWEA)

by 령과 2022. 8. 3.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

빡센 구현이라 풀이는 생략

주어진 설명을 잘 읽고 그대로 구현하면 된다.


import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution_SWEA_1873 {
	static char[][] table;
	static int x = 0;
	static int y = 0;
	static char state = 0;

	public static void main(String args[]) throws Exception {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T, action_len;
		char[] action;

		T = Integer.parseInt(bf.readLine());

		for (int test_case = 1; test_case <= T; test_case++) {
			String[] r_c = bf.readLine().split(" ");
			table = new char[Integer.parseInt(r_c[0])][Integer.parseInt(r_c[1])];

			for (int i = 0; i < table.length; i++) {
				char[] tmp = bf.readLine().toCharArray();
				for (int j = 0; j < tmp.length; j++) {
					table[i][j] = tmp[j];
					if (tmp[j] == '<' || tmp[j] == '>' || tmp[j] == '^' || tmp[j] == 'v') {
						x = i;
						y = j;
						state = tmp[j];
					}
				}
			}

			action_len = Integer.parseInt(bf.readLine());
			action = bf.readLine().toCharArray();
			for (char act : action) {
				act_check(act);
			}
			sb.append("#" + test_case + " ");
			for (int i = 0; i < table.length; i++) {
				for (int j = 0; j < table[i].length; j++) {
					sb.append(table[i][j]);
				}
				sb.append("\n");
			}
		}
		System.out.println(sb);

	}

	public static void act_check(char a) {
		int tmp_x = x, tmp_y = y;
		char tmp_state = 0;
		if (a == 'S') {
			if (state == '^') {
				for (int i = x; i >= 0; i--) {
					if (table[i][y] == '*') {
						table[i][y] = '.';
						break;
					} else if (table[i][y] == '#') {
						break;
					}

				}
			} else if (state == 'v') {
				for (int i = x; i < table.length; i++) {
					if (table[i][y] == '*') {
						table[i][y] = '.';
						break;
					} else if (table[i][y] == '#') {
						break;
					}
				}

			} else if (state == '<') {
				for (int i = y; i >= 0; i--) {
					if (table[x][i] == '*') {
						table[x][i] = '.';
						break;
					} else if (table[x][i] == '#') {
						break;
					}
				}
			} else if (state == '>') {
				for (int i = y; i < table[x].length; i++) {
					if (table[x][i] == '*') {
						table[x][i] = '.';
						break;
					} else if (table[x][i] == '#') {
						break;
					}
				}
			}

			return;
		} else if (a == 'U') {
			tmp_state = '^';
			tmp_x--;
		} else if (a == 'D') {
			tmp_state = 'v';
			tmp_x++;
		} else if (a == 'L') {
			tmp_state = '<';
			tmp_y--;
		} else if (a == 'R') {
			tmp_state = '>';
			tmp_y++;
		}
		check(tmp_x, tmp_y, tmp_state);
	}

	public static void check(int tmp_x, int tmp_y, char tmp_state) {
		state = tmp_state;
		table[x][y] = state;
		if (tmp_x < 0 || tmp_y < 0 || tmp_x >= table.length || tmp_y >= table[0].length || table[tmp_x][tmp_y] != '.') {

			return;
		}
		table[x][y] = '.';
		x = tmp_x;
		y = tmp_y;
		table[x][y] = state;
	}

}

댓글