๊ธฐ๋ก๋ฐฉ

Lv.2 : ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ

Soom_1n 2023. 11. 21. 09:24

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n x m ๋งต์—์„œ (0, 0) ๋ถ€ํ„ฐ (n-1, m-1) ๊นŒ์ง€ ์ด๋™ํ•˜๋Š”๋ฐ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์ „ํ˜•์ ์ธ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฌธ์ œ๋กœ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.ArrayDeque;
import java.util.Queue;

class Solution {
    private static class Point {
        private int row, col;

        public Point(int row, int col) {
            this.row = row;
            this.col = col;
        }
    }

    public int solution(int[][] maps) {
        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};

        int cnt = 1;
        int findR = maps.length - 1;
        int findC = maps[0].length - 1;

        Queue<Point> que = new ArrayDeque<>();
        boolean[][] visited = new boolean[maps.length][maps[0].length];

        que.add(new Point(0, 0));
        visited[0][0] = true;

        while (!que.isEmpty()) {
            int size = que.size();

            for (int i = 0; i < size; i++) {
                Point point = que.poll();

                if (point.row == findR && point.col == findC) {
                    return cnt;
                }

                for (int j = 0; j < dx.length; j++) {
                    int newR = point.row + dx[j];
                    int newC = point.col + dy[j];

                    if (0 <= newR && newR <= findR && 0 <= newC && newC <= findC && !visited[newR][newC] && maps[newR][newC] == 1) {
                        visited[newR][newC] = true;
                        que.add(new Point(newR, newC));
                    }
                }
            }

            cnt++;
        }

        return -1;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • BFS๋ฅผ์œ„ํ•ด ์ขŒํ‘œ๋ฅผ ํ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, Point ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” BFS ๊ณผ์ •์—์„œ ํ•œ ๋ฒˆ์ด๋ผ๋„ ๋ฐฉ๋ฌธํ•œ ์ขŒํ‘œ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.
  • ํ˜„์žฌ ํ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ํ˜„์žฌ ์›€์ง์ธ ํšŸ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • BFS ๋ฌธ์ œ๋ฅผ ์˜ค๋žœ๋งŒ์— ํ’€์–ด๋ดค๋Š”๋ฐ ๊ฐ„๋‹จํžˆ ํ’€์ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์ฑ„์ ์— ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

728x90