๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜-PS] ๋ฐฑ์ค€ 7576๋ฒˆ ํ† ๋งˆํ†  ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 7. 28.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 7576๋ฒˆ ํ† ๋งˆํ†  ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

7576๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M,N ≤ 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† 

www.acmicpc.net

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” BFS ๋ฅผ ์ด์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋Š” 4๋ฐฉ์œผ๋กœ ์ƒ, ํ•˜, ์ขŒ, ์šฐ ๋กœ ์—ฐ๊ฒฐ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋„๊ณ  ์žˆ๋Š”๋ฐ, visited ๋ผ๋Š” ๋ฐฉ๋ฌธ ์ฒดํฌ flag ๊ฐ€ ํ•„์š” ์—†๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•˜๋ฃจ์— 1์”ฉ ์ฉ์–ด๊ฐ„๋‹ค๋ฉด 1 ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ๋ณด๊ณ  ๋„˜์–ด๊ฐ€๋„ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {

    private static int[][] arr;
    private static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();

    static int[] xPos = { -1, 1, 0, 0 };
    static int[] yPos = { 0, 0, -1, 1 };

    private static Queue<Position> queue = new LinkedList<>();

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

        String[] nm = br.readLine().split(" ");

        int n = Integer.parseInt(nm[0]); // x
        int m = Integer.parseInt(nm[1]); // y

        arr = new int[m][n];

        for (int i = 0; i < arr.length; i++) {
            String[] inputs = br.readLine().split(" ");
            for (int j = 0; j < inputs.length; j++) {
                arr[i][j] = Integer.parseInt(inputs[j]);
                if(arr[i][j] == 1) {
                    queue.add(new Position(j, i));
                }
            }
        }

        decay(n, m);

        int answer = 0;

        for (int i = 0; i < arr.length; i++) {
            for(int value : arr[i]) {
                if(value == 0) {
                    System.out.println(-1);
                    return ;
                }
                answer = Math.max(answer, value);
            }
        }
        System.out.println(answer - 1);
    }

    private static void decay(int n, int m) {
        while(!queue.isEmpty()) {
            Position front = queue.remove();
            for (int i = 0; i < 4; i++) {
                int xx = xPos[i] + front.x;
                int yy = yPos[i] + front.y;

                if(0 <= xx && xx < n && 0 <= yy & yy < m) {
                    if(arr[yy][xx] == 0) {
                        arr[yy][xx] = arr[front.y][front.x] + 1;
                        queue.add(new Position(xx, yy));
                    }
                }
            }
        }
    }

    private static class Position {
        int x;
        int y;

        public Position(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€