[알고리즘] 상호의 배틀필드
2024. 2. 15. 16:31ㆍ알고리즘 풀이/Java
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc
import java.awt.Point;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int testCase = 1; testCase <= T; testCase++) {
st = new StringTokenizer(br.readLine());
int H = Integer.parseInt(st.nextToken());
int W = Integer.parseInt(st.nextToken());
char[][] map = new char[H][W];
Point startPoint = null;
for (int i = 0; i < H; i++) {
String line = br.readLine();
for (int j = 0; j < W; j++) {
map[i][j] = line.charAt(j);
if (map[i][j] == '<' || map[i][j] == '^'
|| map[i][j] == 'v' || map[i][j] == '>') {
startPoint = new Point(i, j);
}
}
}
int N = Integer.parseInt(br.readLine());
char[] commands = br.readLine().toCharArray();
Point curPoint = startPoint;
for (char command : commands) {
int row = curPoint.x;
int col = curPoint.y;
int nrow;
int ncol;
switch (command) {
case 'U':
nrow = row - 1;
if (0 <= nrow && map[nrow][col] == '.') {
map[row][col] = '.';
map[nrow][col] = '^';
curPoint.x = nrow;
} else {
map[row][col] = '^';
}
break;
case 'D':
nrow = row + 1;
if (nrow < H && map[nrow][col] == '.') {
map[row][col] = '.';
map[nrow][col] = 'v';
curPoint.x = nrow;
} else {
map[row][col] = 'v';
}
break;
case 'L':
ncol = col - 1;
if (0 <= ncol && map[row][ncol] == '.') {
map[row][col] = '.';
map[row][ncol] = '<';
curPoint.y = ncol;
} else {
map[row][col] = '<';
}
break;
case 'R':
ncol = col + 1;
if (ncol < W && map[row][ncol] == '.') {
map[row][col] = '.';
map[row][ncol] = '>';
curPoint.y = ncol;
} else {
map[row][col] = '>';
}
break;
case 'S':
int dx = 0;
int dy = 0;
switch (map[row][col]) {
case '>':
dx = 0;
dy = 1;
break;
case '<':
dx = 0;
dy = -1;
break;
case '^':
dx = -1;
dy = 0;
break;
case 'v':
dx = 1;
dy = 0;
break;
}
int x = row;
int y = col;
int nx = x + dx;
int ny = y + dy;
while (true) {
if (!(0 <= nx && nx < H && 0 <= ny && ny < W)) {
break;
}
if (map[nx][ny] == '*') {
map[nx][ny] = '.';
break;
} else if (map[nx][ny] == '#') {
break;
}
nx += dx;
ny += dy;
}
break;
}
}
sb.append("#").append(testCase).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.println(sb);
}
}
나의 풀이
- 생구현하면 된다.
- 다행히 한번에 됐다.
'알고리즘 풀이 > Java' 카테고리의 다른 글
[알고리즘] 무선 충전 (0) | 2024.02.15 |
---|---|
[알고리즘] 최적 경로 (0) | 2024.02.15 |
[알고리즘][X] 월드컵 (0) | 2024.02.15 |
[알고리즘] 빵집 (1) | 2024.02.14 |
[알고리즘][X] Z (1) | 2024.02.14 |