https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
import java.util.Scanner;
public class Solution {
static int[] dx = {1, 0, -1, 0};
static int[] dy = {0, 1, 0, -1};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt(); // 테스트 케이스의 수
for (int t = 1; t <= T; t++) {
int h = scanner.nextInt(); // 게임 맵의 높이
int w = scanner.nextInt(); // 게임 맵의 너비
char[][] map = new char[h][w];
int d = 0; // 0:우, 1:하, 2:좌, 3:상
int y = 0; // 행
int x = 0; // 열
for (int i = 0; i < h; i++) {
String str = scanner.next();
for (int j = 0; j < w; j++) {
map[i][j] = str.charAt(j);
if (map[i][j] == '^' || map[i][j] == '<' || map[i][j] == '>' || map[i][j] == 'v') {
y = i;
x = j;
if (map[i][j] == '^')
d = 3;
else if (map[i][j] == '<')
d = 2;
else if (map[i][j] == '>')
d = 0;
else if (map[i][j] == 'v')
d = 1;
}
}
}
int N = scanner.nextInt(); // 사용자가 넣을 입력의 개수
String input = scanner.next();
for (int in = 0; in < input.length(); in++) {
boolean okay = false;
if (input.charAt(in) == 'U') { // 전차가 바라보는 방향을 위쪽으로 바꾸고, 한 칸 위의 칸이 평지라면 위 그 칸으로 이동한다.
d = 3;
map[y][x] = '^';
if (y + dy[d] >= 0 && map[y + dy[d]][x] == '.')
okay = true;
}
else if (input.charAt(in) == 'D') { // 전차가 바라보는 방향을 아래쪽으로 바꾸고, 한 칸 아래의 칸이 평지라면 위 그 칸으로 이동한다.
d = 1;
map[y][x] = 'v';
if (y + dy[d] < h && map[y + dy[d]][x] == '.')
okay = true;
}
else if (input.charAt(in) == 'L') { // 전차가 바라보는 방향을 왼쪽으로 바꾸고, 한 칸 왼쪽의 칸이 평지라면 위 그 칸으로 이동한다.
d = 2;
map[y][x] = '<';
if (x + dx[d] >= 0 && map[y][x + dx[d]] == '.')
okay = true;
}
else if (input.charAt(in) == 'R') { // 전차가 바라보는 방향을 오른쪽으로 바꾸고, 한 칸 오른쪽의 칸이 평지라면 위 그 칸으로 이동한다.
d = 0;
map[y][x] = '>';
if (x + dx[d] < w && map[y][x + dx[d]] == '.')
okay = true;
}
if (okay) {
map[y][x] = '.';
y += dy[d];
x += dx[d];
map[y][x] = '>';
}
if (input.charAt(in) == 'S') { // 전차가 현재 바라보고 있는 방향으로 포탄을 발사한다.
int bombY = y; // 폭탄의 위치(행)
int bombX = x; // 폭탄의 위치(열)
while (true) {
if (bombY + dy[d] < 0 || bombY + dy[d] >= h || bombX + dx[d] < 0 || bombX + dx[d] >= w || map[bombY+dy[d]][bombX+dx[d]] == '#') // 포탄이 강철로 만들어진 벽에 충돌하거나 게임 맵 밖으로 나가면, 아무 일도 일어나지 않는다.
break;
else if (map[bombY+dy[d]][bombX+dx[d]] == '*') { // 포탄이 벽돌로 만들어진 벽에 충돌하면, 벽은 파괴되어 칸은 평지가 된다.
map[bombY+dy[d]][bombX+dx[d]] = '.';
break;
}
else { // 포탄은 계속 직진한다.
bombY += dy[d];
bombX += dx[d];
}
}
}
}
System.out.print("#" + t + " ");
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++)
System.out.print(map[i][j]);
System.out.println();
}
}
scanner.close();
}
}
'Algorithm > 백준+프로그래머스+SWEA+정올+구름' 카테고리의 다른 글
[Algorithm] 백준 5622 다이얼 (0) | 2021.08.04 |
---|---|
[Algorithm] SWEA 2001 파리 퇴치 (0) | 2021.08.04 |
[Algorithm] SWEA 1208 Flatten (0) | 2021.08.04 |
[Algorithm] SWEA 1289 원재의 메모리 복구하기 (0) | 2021.08.04 |
[Algorithm] 백준 17478 재귀함수가 뭔가요? (0) | 2021.08.04 |