본문 바로가기
Problem Solving/Baekjoon

[백준] 28389 EGIPAT - Graph Theory / Java

by graycode 2024. 8. 18.

 문제 링크

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

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {

    static int n, m;
    static boolean[][] mat;
    static int[][] dir = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
    static Map<Integer, String> map = init();
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        mat = new boolean[n = Integer.parseInt(st.nextToken())][m = Integer.parseInt(st.nextToken())];

        int y = 0, x = 0;
        for (int i = 0; i < n; i++) {
            String s = br.readLine();
            for (int j = 0; j < m; j++) {
                char c = s.charAt(j);
                if (c == 'x') mat[i][j] = true;
                else if (c == 'P') {
                    y = i;
                    x = j;
                }
            }
        }

        dfs(y, x);

        bw.write(sb.toString());
        bw.flush();
    }

    private static void dfs(int y, int x) {
        mat[y][x] = false;
        for (int i = 0; i < dir.length; i++) {
            int ny = y + dir[i][0], nx = x + dir[i][1];
            if (ny < 0 || ny >= n || nx < 0 || nx >= m || !mat[ny][nx]) continue;

            sb.append(map.get(i));
            dfs(ny, nx);
            return;
        }
    }

    private static Map<Integer, String> init() {
        Map<Integer, String> map = new HashMap<>();
        map.put(0, "dolje\n");
        map.put(1, "gore\n");
        map.put(2, "lijevo\n");
        map.put(3, "desno\n");

        return map;
    }

}

댓글