https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc
풀이
빡센 구현이라 풀이는 생략
주어진 설명을 잘 읽고 그대로 구현하면 된다.
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;
}
}
'공부-코딩테스트 > 코테풀이 - 자바, 파이썬' 카테고리의 다른 글
11660. 구간 합 구하기 5 (자바, 코딩테스트, 백준) (0) | 2022.08.03 |
---|---|
11659.구간 합 구하기 4 (자바, 코딩테스트, 백준) (0) | 2022.08.03 |
2805. 농작물 수확하기 (자바, 코딩테스트, SWEA) (0) | 2022.08.03 |
1210. [S/W 문제해결 기본] 2일차 - Ladder1 (SWEA, 자바, 코딩테스트) (0) | 2022.08.02 |
괄호 회전하기 (파이썬, 프로그래머스, 코딩테스트) (5) | 2022.07.16 |
댓글