본문 바로가기
Algorithm/Simulation

[자바] SWEA 1873 : 상호의 배틀필드 (D3)

by 베짱이28호 2025. 3. 9.

[자바] 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();
                }
        }
    }
}

코멘트

  • .

댓글