[자바] SWEA 1873 : 상호의 배틀필드 (D3)
풀이
방향성 생각
- 단순 구현 문제
- 문자열 관리 잘 해주기.
- 문제 조건에 맞춰서 포탄을 쏘는 행동에는 벽 유무를, 이동하는 경우에는 방향 전환 + 이동 구현해주기
전체코드
import java.io.*;
import java.util.*;
public class Solution {
static int TC,H,W,C,dire;
static char[][] arr;
static char[] cmds;
static int[] cur;
static int[][] dires = {{1,0},{0,1},{-1,0},{0,-1}};
static boolean inside(int x, int y) {
return 0<=x && x<W && 0<=y && y<H;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
TC = Integer.parseInt(br.readLine());
for (int tc=1; tc<=TC; tc++) {
st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
arr = new char[H][W];
for (int y=0; y<H; y++) {
arr[y] = br.readLine().toCharArray();
}
cur = new int[] {0,0};
dire = 0;
for (int y=0; y<H; y++) {
for (int x=0; x<W; x++) {
if ("<>v^".contains(String.valueOf(arr[y][x]))) {
cur[0] = x;
cur[1] = y;
if (arr[y][x] == '>') {
dire = 0;
} else if (arr[y][x] == '<') {
dire = 2;
} else if (arr[y][x] == '^') {
dire = 3;
} else if (arr[y][x] == 'v') {
dire = 1;
}
}
}
}
st = new StringTokenizer(br.readLine());
int C = Integer.parseInt(st.nextToken());
char[] cmds = br.readLine().toCharArray();
for (char cmd : cmds) {
if (cmd=='U') {
dire = 3;
arr[cur[1]][cur[0]] = '^';
if (inside(cur[0], cur[1]-1) && arr[cur[1]-1][cur[0]]=='.') {
arr[cur[1]-1][cur[0]] = '^';
arr[cur[1]][cur[0]] = '.';
cur[1] -= 1;
}
} else if (cmd=='D') {
dire = 1;
arr[cur[1]][cur[0]] = 'v';
if (inside(cur[0], cur[1]+1) && arr[cur[1]+1][cur[0]]=='.') {
arr[cur[1]+1][cur[0]] = 'v';
arr[cur[1]][cur[0]] = '.';
cur[1] += 1;
}
} else if (cmd == 'L') {
dire = 2;
arr[cur[1]][cur[0]] = '<';
if (inside(cur[0]-1,cur[1]) && arr[cur[1]][cur[0]-1]=='.') {
arr[cur[1]][cur[0]-1] = '<';
arr[cur[1]][cur[0]] = '.';
cur[0] -= 1;
}
} else if (cmd == 'R') {
dire = 0;
arr[cur[1]][cur[0]] = '>';
if (inside(cur[0]+1,cur[1]) && arr[cur[1]][cur[0]+1]=='.') {
arr[cur[1]][cur[0]+1] = '>';
arr[cur[1]][cur[0]] = '.';
cur[0] += 1;
}
} else if (cmd == 'S') {
int dx = dires[dire][0];
int dy = dires[dire][1];
int nx = cur[0]+dx, ny = cur[1]+dy;
while (inside(nx,ny)) {
if (arr[ny][nx] == '#') {
break;
} else if (arr[ny][nx] == '*') {
arr[ny][nx] = '.';
break;
}
nx += dx;
ny += dy;
}
}
}
System.out.print("#" + tc + " ");
for (int i=0; i<H; i++) {
for (int j=0; j<W; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
}
코멘트
- .
'Algorithm > Simulation' 카테고리의 다른 글
[자바] SWEA 6109 : 추억의 2048 게임 (D4) (0) | 2025.03.09 |
---|---|
[파이썬] SWEA 5644 : 무선 충전 (TEST) (0) | 2025.03.09 |
[자바] SWEA 2382 : 미생물 격리 (test) (0) | 2025.03.09 |
[파이썬,자바] 프로그래머스 : 지게차와 크레인 (레벨2) (0) | 2025.02.11 |
[파이썬] 프로그래머스 : 혼자 놀기의 달인 (레벨2) (0) | 2024.06.10 |
[파이썬] 코드트리 : 코드트리 투어 (골드2) (0) | 2024.05.11 |
[파이썬] 코드트리 : 고대 문명 유적 탐사 (골드4) (0) | 2024.05.01 |
댓글