-
[SWEA] 1873. 상호의 배틀필드PS/Java 2021. 3. 9.
맵의 구성
. 평지(전차가 들어갈 수 있다.) * 벽돌로 만들어진 벽 # 강철로 만들어진 벽 - 물(전차는 들어갈 수 없다.) ^ 위쪽을 바라보는 전차(아래는 평지이다.) v 아래쪽을 바라보는 전차(아래는 평지이다.) < 왼쪽을 바라보는 전차(아래는 평지이다.) > 오른쪽을 바라보는 전차(아래는 평지이다.) 사용자의 입력
U Up : 전차가 바라보는 방향을 위쪽으로 바꾸고, 한 칸 위의 칸이 평지라면 위 그 칸으로 이동한다. D Down : 전차가 바라보는 방향을 아래쪽으로 바꾸고, 한 칸 아래의 칸이 평지라면 그 칸으로 이동한다. L Left : 전차가 바라보는 방향을 왼쪽으로 바꾸고, 한 칸 왼쪽의 칸이 평지라면 그 칸으로 이동한다. R Right : 전차가 바라보는 방향을 오른쪽으로 바꾸고, 한 칸 오른쪽의 칸이 평지라면 그 칸으로 이동한다. S Shoot : 전차가 현재 바라보고 있는 방향으로 포탄을 발사한다. 맵이 주어지고 사용자의 입력이 순서대로 주어질 때 입력을 수행하고 나서 맵이 어떻게 생겼는지 출력
import java.util.Scanner; public class swea상호의배틀필드 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); for(int tc = 1; tc <= T; tc++) { int h = scanner.nextInt(); // 높이 int w = scanner.nextInt(); // 너비 String [][] map= new String[h][w]; int m = 0, n = 0; // 전차의 현재 x, y좌표 int dIndex = 0; // 전차의 현재 방향을 알릴 인덱스 String[] dir = {"^", "v", "<", ">"}; for(int i = 0; i < h; i++) { map[i] = scanner.next().split(""); for(int j = 0; j < w; j++) { for(int k = 0; k < dir.length; k++) { if(map[i][j].equals(dir[k])) { dIndex = k; m = i; n = j; map[i][j] = "."; } } } } scanner.nextInt(); String motion[] = scanner.next().split(""); // 현재 위치 map[m][n]; for(int i = 0; i < motion.length; i++) { switch (motion[i]) { case "U": dIndex = 0; if(m - 1 >= 0 && map[m - 1][n].equals(".")) { // 전차 위쪽이 평지일 때만 이동 m -= 1; } break; case "D": dIndex = 1; if(m + 1 < h && map[m + 1][n].equals(".")) { // 전차 아래쪽이 평지일 때만 이동 m += 1; } break; case "L": dIndex = 2; if(n - 1 >= 0 && map[m][n - 1].equals(".")) { // 전차 왼쪽이 평지일 때만 이동 n -= 1; } break; case "R": dIndex = 3; if(n + 1 < w && map[m][n + 1].equals(".")) { // 전차 오른쪽이 평지일 시 n += 1; } break; case "S": // 0 1 2 3 = 상 하 좌 우 현재위치 [m][n] int k = m; int j = n; if(dIndex == 0) { while(k > 0) { k--; if(map[k][n].equals("*")) { map[k][n] = "."; break; } else if (map[k][n].equals("#")) { break; } } } else if (dIndex == 1) { while(k < h - 1) { k++; if(map[k][n].equals("*")) { map[k][n] = "."; break; } else if (map[k][n].equals("#")) { break; } } } else if (dIndex == 2) { while(j > 0) { j--; if(map[m][j].equals("*")) { map[m][j] = "."; break; } else if (map[m][j].equals("#")) { break; } } } else if (dIndex == 3) { while(j < w - 1) { j++; if(map[m][j].equals("*")) { map[m][j] = "."; break; } else if (map[m][j].equals("#")) { break; } } } break; } } map[m][n] = dir[dIndex]; System.out.print("#" + tc + " "); for(String t[] : map) { for(String s : t) { System.out.print(s); } System.out.println(); } } } }
'PS > Java' 카테고리의 다른 글
[SWEA] 1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 (0) 2021.03.10 [SWEA] 1974. 스도쿠 검증 (0) 2021.03.10 [SWEA] 5431. 민석이의 과제 체크하기 (0) 2021.03.09 [SWEA] 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) 2021.03.09 [SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) 2021.03.09