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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 7562 ๋‚˜์ดํŠธ์˜ ์ด๋™ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 7. 31.

๋ฌธ์ œ

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

 

7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜

www.acmicpc.net

 

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

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด ๋ฌธ์ œ๋Š” BFS ๋ฅผ ์ด์šฉํ•ด์„œ ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ํ์— ๋„ฃ๊ณ  ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {

    private static int[] posX = {-1, -2, -2, -1, 1, 2, 2, 1};
    private static int[] posY = {-2, -1, 1, 2, 2, 1, -1, -2};

    private static int[][] arr;

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

        int t = Integer.parseInt(br.readLine());

        while(t-- > 0) {
            int l = Integer.parseInt(br.readLine());

            arr = new int[l][l];

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

            int fromX = Integer.parseInt(from[0]);
            int fromY = Integer.parseInt(from[1]);

            int toX = Integer.parseInt(to[0]);
            int toY = Integer.parseInt(to[1]);

            arr[fromY][fromX] = 1;

            int result = bfs(fromX, fromY, toX, toY, l) - 1;

            bw.write(result + "\n");
        }

        bw.flush();
        bw.close();
    }

    private static int bfs(int fromX, int fromY, int toX, int toY, int l) {
        Queue<Position> queue = new LinkedList<>();
        queue.add(new Position(fromX, fromY));

        while(!queue.isEmpty()) {
            Position front = queue.remove();

            if(front.x == toX && front.y == toY) {
                return arr[front.y][front.x];
            }

            for (int i = 0; i < 8; i++) {
                int xx = front.x + posX[i];
                int yy = front.y + posY[i];

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

        return -1;
    }

    private static class Position {
        int x;
        int y;

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


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

๋Œ“๊ธ€