SWEA 1873 - 상호의 배틀필드
Updated:
Java
1873 번 - 상호의 배틀필드
문제
접근 방법
간단한 시물레이션 문제이다.
코드
import java.io.*;
import java.util.*;
class Solution {
public static void main(String []args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int result = 0;
StringTokenizer st;
int tc = stoi(br.readLine());
int n, m, orderN, y = 0, x = 0, sy, sx, d;
char map[][], dir = 0;
String order;
int dy[] = {-1, 1, 0, 0};
int dx[] = {0, 0, -1, 1};
for(int idx = 1; idx <= tc; idx++) {
// 게임 맵 초기 상태 입력
st = new StringTokenizer(br.readLine());
n = stoi(st.nextToken());
m = stoi(st.nextToken());
map = new char[n][m];
for(int i = 0; i < n; i++) {
map[i] = br.readLine().toCharArray();
}
// 초기 전차 위치 확인
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(map[i][j] == '<' || map[i][j] == '^' || map[i][j] == 'v' || map[i][j] == '>') {
y = i;
x = j;
dir = map[i][j]; // 처음 전차가 바라보는 방향 설정
}
}
}
// 전차 동작 수행
orderN = stoi(br.readLine());
order = br.readLine();
for(int i = 0; i < orderN; i++) {
switch(order.charAt(i)) {
case 'U':
map[y][x] = '^'; // 이동을 하지 않더라도 보는 방향은 바꾸어 준다.
dir = '^';
if(y - 1 >= 0 && map[y - 1][x] == '.') {
map[y - 1][x] = '^';
map[y][x] = '.';
y--;
dir = '^';
}
break;
case 'D':
map[y][x] = 'v';
dir = 'v';
if(y + 1 < n && map[y + 1][x] == '.') {
map[y + 1][x] = 'v';
map[y][x] = '.';
y++;
dir = 'v';
}
break;
case 'L':
map[y][x] = '<';
dir = '<';
if(x - 1 >= 0 && map[y][x - 1] == '.') {
map[y][x - 1] = '<';
map[y][x] = '.';
x--;
}
break;
case 'R':
map[y][x] = '>';
dir = '>';
if(x + 1 < m && map[y][x + 1] == '.') {
map[y][x + 1] = '>';
map[y][x] = '.';
x++;
dir = '>';
}
break;
case 'S':
sy = y;
sx = x;
if(dir == '^')
d = 0;
else if(dir == 'v')
d = 1;
else if(dir == '<')
d = 2;
else
d = 3;
while(true) {
if(sy + dy[d] < 0 || sy + dy[d] >= n || sx + dx[d] < 0 || sx + dx[d] >= m) // 범위 밖을 벗어나면 종료
break;
sy += dy[d];
sx += dx[d];
if(map[sy][sx] == '*') { // 벽이면 파괴
map[sy][sx] = '.';
break;
}
else if(map[sy][sx] == '#') // 강철벽이면 막히고 종료
break;
}
break;
}
}
System.out.print("#" + idx + " ");
for(char[] vv : map) {
for(char v : vv) {
System.out.print(v);
}
System.out.println();
}
}
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
총평
난이도
⭐★★★★
후기
기초 시뮬레이션 문제
개선할 점
없