알고리즘

백준 1347번 미로 만들기 (JAVA)

박카스마시며코딩 2023. 3. 6. 13:38

https://www.acmicpc.net/problem/1347

 

1347번: 미로 만들기

홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍

www.acmicpc.net

 

 

 

 

package BOJ.simulation;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.function.Function;

public class BOJ_1347 {
    private static final int SIZE = 50;
    private static final char LEFT = 'L';
    private static final char RIGHT = 'R';
    private static final char EMPTY = '.';
    private static final char BLOCK = '#';
    private static final int[] DY = {-1,0,1,0};
    private static final int[] DX = {0,1,0,-1};
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(br.readLine());
        String command = br.readLine();
        cal(command,n);
    }

    private static void cal(String command, int n) {
        boolean[][] visited = new boolean[2*SIZE + 1][2*SIZE + 1];
        int dir = 2;
        int y = SIZE;
        int x = SIZE;
        visited[y][x] = true;
        int maxY = SIZE;
        int minY = SIZE;
        int maxX = SIZE;
        int minX = SIZE;
        for(int i = 0 ; i < n ; i++){
            char ch = command.charAt(i);
            if(ch == LEFT){
                dir = (dir+3) % 4;
            }else if(ch == RIGHT){
                dir = (dir+1) % 4;
            }else{
                y += DY[dir];
                x += DX[dir];
                visited[y][x] = true;
                maxY = Math.max(maxY,y);
                minY = Math.min(minY,y);
                maxX = Math.max(maxX,x);
                minX = Math.min(minX,x);
            }
        }
        for(int i = minY ; i <= maxY ; i++){
            for(int j = minX ; j <= maxX ; j++){
                if(visited[i][j]){
                    System.out.print(EMPTY);
                }else{
                    System.out.print(BLOCK);
                }
            }
            System.out.println();
        }
    }
}