์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/JAVA

[JAVA] ๋ฐฑ์ค€ 2146๋ฒˆ ใ€๋‹ค๋ฆฌ ๋งŒ๋“ค๊ธฐใ€‘

2022. 11. 17. 17:23

 


 

์–ด์ œ ์ด ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํ•˜๋ฃจ๋ฅผ ํ†ต์œผ๋กœ ๋‚ ๋ ธ๋‹ค...

 

๊ณ ๋ฏผ์„ ๊ทธ๋งŒํผ ๋งŽ์ด ํ–ˆ๋˜ ๋ฌธ์ œ, ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์•„์ด๋””์–ด ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋– ์˜ฌ๋ž๋Š”๋ฐ, ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๊ต‰์žฅํžˆ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

 

1. ์„ฌ๋งˆ๋‹ค, ๊ฐ™์€ ์œก์ง€๋Š” ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•ด์„œ Labeling์„ ํ•œ๋‹ค.

2. boolean ๋งต์„ ๋งŒ๋“ค์–ด์„œ, ์œก์ง€ ๋ถ€๋ถ„์„ True๋กœ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค.

3. ์„ฌ๋งˆ๋‹ค bfs๋ฅผ ์‹คํ–‰ํ•ด์„œ, ๋‹ค๋ฅธ ์„ฌ๊ณผ ๋งŒ๋‚˜๋Š” ์ˆœ๊ฐ„, ๊ธธ์ด๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๊ฐ€์žฅ ์ตœ์†Ÿ๊ฐ’์„ ๋‚จ๊ธด๋‹ค.

 

๋จผ์ € ์ „์ฒด ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class No_2146 {

    static int N, min = Integer.MAX_VALUE;
    static int land = 1;
    static int[][] map;
    static boolean[][] marked;
    static int[] dx = {1, -1, 0, 0};
    static int[] dy = {0, 0, 1, -1};

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

        // ๋งต๊ณผ ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.
        N = Integer.parseInt(br.readLine());
        map = new int[N][N];
        marked = new boolean[N][N];


        //๋งต์„ ๋‹ค ์ž…๋ ฅํ•œ๋‹ค.
        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");
            for (int j = 0; j < N; j++) {
                map[i][j] = Integer.parseInt(input[j]);
            }
        }



        //๊ฐ™์€ ์„ฌ์˜ ์œก์ง€์— ๋ผ๋ฒจ๋ง์„ ํ•œ๋‹ค.
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {

                //๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ? + ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋˜ ์œก์ง€์ธ ๊ฒฝ์šฐ? PASS
                if (map[i][j] == 0 || marked[i][j] == true) {
                    continue;
                }
                //๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ ์œก์ง€๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ? dfs ์‹คํ–‰
                dfs(i, j);

                //dfs๊ฐ€ ๋๋‚˜๋ฉด, ๋ผ๋ฒจ๋งํ•  land์˜ ๊ฐ’์„ ํ•˜๋‚˜ ์ฆ๊ฐ€ ์‹œํ‚จ๋‹ค.
                land++;
            }
        }

        //๋ฐฉ๋ฌธ๊ธฐ๋ก์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๋‚จ๊ฒจ๋†€ ์ด์œ ๊ฐ€ ์—†๋‹ค. ์ด์ „ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์€ dfs๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด๋‘” ๊ฒƒ์ผ ๋ฟ bfs๋ฅผ ๋‹ค์‹œ
        //์ž‘๋™์‹œ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์žฌํ™œ์šฉํ•˜๋Š” ๊ฒƒ
        marked = new boolean[N][N];

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {

                //๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ? PASS
                if (map[i][j] == 0 ){
                    continue;
                }
                //์ฒ˜์Œ ๋ฐฉ๋ฌธํ•œ ์œก์ง€๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ? bfs ์‹คํ–‰
                bfs(i, j, map[i][j]);
            }
        }

        System.out.println(min);
    }


    static void dfs(int x, int y) {
        //์œก์ง€์ด๋ฉด์„œ (map[x][y]==1) ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ด ์—†๋Š” ๊ณณ์ผ ๋•Œ
        if (marked[x][y] == false && map[x][y] == 1) {

            //๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ๋‚จ๊ธด๋‹ค.
            marked[x][y] = true;
            //๋ฐฉ๋ฌธ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋ฉด์„œ, land ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
            map[x][y] = land;

            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                //์ด๋™ํ•˜๋ฉด์„œ ๋งต ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์œก์ง€์ธ ๊ฒฝ์šฐ dfs๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
                if (((0 <= nx && nx < N) && (0 <= ny && ny < N)) && marked[nx][ny] == false && map[nx][ny] == 1) {
                    dfs(nx, ny);
                }
            }
        }
    }

    static void bfs(int x, int y, int land) {
        //bfs๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  Queue
        Queue<int[]> q = new LinkedList<>();

        //bfs๋ฅผ ์œ„ํ•ด ํ์— ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ๋„ฃ๋Š”๋‹ค.
        // x์ขŒํ‘œ y์ขŒํ‘œ ๋‹ค๋ฆฌ๊ธธ์ด(๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค, ๋ฐ”๋‹ค๋ฅผ ๋งŒ๋‚˜๋ฉด 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.)
        q.offer(new int[]{x, y, 0});

        //๋ฐฉ๋ฌธํ–ˆ๋˜ ๋ฐ”๋‹ค์ธ์ง€ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        boolean[][] marked = new boolean[N][N];

        //ํ๊ฐ€ ์™„์ „ํžˆ ๋นŒ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰
        while (!q.isEmpty()) {
            int[] point = q.poll();
            for (int k = 0; k < 4; k++) {

                //ํ์— ๋„ฃ์—ˆ๋˜ ํฌ์ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ,ํ•˜,์ขŒ,์šฐ ํƒ์ƒ‰
                int nx = point[0] + dx[k];
                int ny = point[1] + dy[k];

                //๋งต ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ, PASS
                if (nx < 0 || ny < 0 || nx >= N || ny >= N) {
                    continue;
                }

                //๊ฐ™์€ ์„ฌ์ผ ๊ฒฝ์šฐ, ๋‹ค๋ฆฌ๋ฅผ ๋†“์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋งŒ ํ•˜๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.
                if (map[nx][ny] == land) {
                    continue;
                }

                //๋ฐฉ๋ฌธํ–ˆ๋˜ ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ ๋„˜์–ด๊ฐ„๋‹ค.
                if (marked[nx][ny] == true) {
                    continue;
                }

                // ํฌ์ธํŠธ๊ฐ€ 0์ด๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋ฐ”๋‹ค๋ผ๋ฉด?
                if (map[nx][ny] == 0) {
                    //ํ์— ์ถ”๊ฐ€ํ•ด์ค€ ๋’ค, ๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ 1์นธ ๋Š˜๋ฆฐ๋‹ค.
                    // ๋ฐ”๋‹ค ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธด๋‹ค.
                    q.offer(new int[]{nx, ny, point[2] + 1});
                    marked[nx][ny] = true;

                    //๋‹ค๋ฅธ ์„ฌ์— ๋„์ฐฉํ–ˆ๋‹ค๋ฉด? ๋”์ด์ƒ ํƒ์ƒ‰์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
                } else if (map[nx][ny] != land) {
                    //๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ , ์ตœ์†Ÿ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค.
                    min = Math.min(min, point[2]);
                    return;
                }
            }
        }
    }
}

 

1. ๋ฉ”์ธ ๋ฉ”์„œ๋“œ

 

๋จผ์ €, ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋Š” ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

 

BufferedReader๋ฅผ ์‚ฌ์šฉํ•ด์„œ N์„ ์ž…๋ ฅ๋ฐ›๊ณ , N*N ํฌ๊ธฐ์˜ ๋งต์„ ๋งŒ๋“ ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๋งต์„ ์ž…๋ ฅํ•œ๋‹ค.

 

land ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ, dfsํ–ˆ์„๋•Œ, ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋˜๋Š” ์„ฌ์— land = 1 ๊ฐ’์œผ๋กœ ์ญ‰ ๋ผ๋ฒจ๋งํ•˜๊ณ ,

 

๋‹ค์Œ dfs ๋•Œ๋Š” land =2 ๋กœ ๋ผ๋ฒจ๋งํ•˜๊ณ ... ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•  ๊ฒƒ์ด๋‹ค.

 

๊ทธ ๋‹ค์Œ, bfs๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ์ตœ๋‹จ ๊ฑฐ๊ธฐ๋ฅผ ์ฐพ์„ ๊ฒƒ์ด๋‹ค.

 

2. ์„ฌ๋งˆ๋‹ค ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•ด์„œ ๋ผ๋ฒจ๋ง ํ•˜๊ธฐ

 

 static void dfs(int x, int y) {
        //์œก์ง€์ด๋ฉด์„œ (map[x][y]==1) ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ด ์—†๋Š” ๊ณณ์ผ ๋•Œ
        if (marked[x][y] == false && map[x][y] == 1) {

            //๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ๋‚จ๊ธด๋‹ค.
            marked[x][y] = true;
            //๋ฐฉ๋ฌธ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋ฉด์„œ, land ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
            map[x][y] = land;

            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                //์ด๋™ํ•˜๋ฉด์„œ ๋งต ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์œก์ง€์ธ ๊ฒฝ์šฐ dfs๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
                if (((0 <= nx && nx < N) && (0 <= ny && ny < N)) && marked[nx][ny] == false && map[nx][ny] == 1) {
                    dfs(nx, ny);
                }
            }
        }
    }

 

๋จผ์ €, ๋ผ๋ฒจ๋ง ์ž‘์—…์€ dfs๋Š” ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

๋ฐฉ๋ฌธ ํ‘œ์‹œ๊ฐ€ ์•ˆ๋˜์–ด์žˆ์œผ๋ฉด์„œ, map[x][y]==1 ์ฆ‰, ์ž…๋ ฅ๋ฐ›์€ map์— ์˜ํ•ด์„œ 1์€ ์œก์ง€์ด๊ธฐ ๋•Œ๋ฌธ์—, 

 

๋ฐฉ๋ฌธ ํ‘œ์‹œ๊ฐ€ ์•ˆ๋˜์–ด ์žˆ๋Š” ๋ถ™์–ด์žˆ๋Š” ์œก์ง€ ์ขŒํ‘œ๋Š” ๋ชจ๋‘ ์ง€๋‚˜๊ฐ€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

์ƒ,ํ•˜,์ขŒ,์šฐ๋กœ ์ด๋™ํ•˜๋ฉด์„œ, ๋งต์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด์„œ, ์œก์ง€๋ผ๊ณ  ํŒ๋‹จ๋˜๋ฉด land๊ฐ’์„ ๋ถ€์—ฌํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

 

3. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐํ•˜๊ธฐ

 static void bfs(int x, int y, int land) {
        //bfs๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  Queue
        Queue<int[]> q = new LinkedList<>();

        //bfs๋ฅผ ์œ„ํ•ด ํ์— ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ๋„ฃ๋Š”๋‹ค.
        // x์ขŒํ‘œ y์ขŒํ‘œ ๋‹ค๋ฆฌ๊ธธ์ด(๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค, ๋ฐ”๋‹ค๋ฅผ ๋งŒ๋‚˜๋ฉด 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.)
        q.offer(new int[]{x, y, 0});

        //๋ฐฉ๋ฌธํ–ˆ๋˜ ๋ฐ”๋‹ค์ธ์ง€ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        boolean[][] marked = new boolean[N][N];

        //ํ๊ฐ€ ์™„์ „ํžˆ ๋นŒ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰
        while (!q.isEmpty()) {
            int[] point = q.poll();
            for (int k = 0; k < 4; k++) {

                //ํ์— ๋„ฃ์—ˆ๋˜ ํฌ์ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ,ํ•˜,์ขŒ,์šฐ ํƒ์ƒ‰
                int nx = point[0] + dx[k];
                int ny = point[1] + dy[k];

                //๋งต ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ, PASS
                if (nx < 0 || ny < 0 || nx >= N || ny >= N) {
                    continue;
                }

                //๊ฐ™์€ ์„ฌ์ผ ๊ฒฝ์šฐ, ๋‹ค๋ฆฌ๋ฅผ ๋†“์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋งŒ ํ•˜๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.
                if (map[nx][ny] == land) {
                    continue;
                }

                //๋ฐฉ๋ฌธํ–ˆ๋˜ ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ ๋„˜์–ด๊ฐ„๋‹ค.
                if (marked[nx][ny] == true) {
                    continue;
                }

                // ํฌ์ธํŠธ๊ฐ€ 0์ด๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋ฐ”๋‹ค๋ผ๋ฉด?
                if (map[nx][ny] == 0) {
                    //ํ์— ์ถ”๊ฐ€ํ•ด์ค€ ๋’ค, ๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ 1์นธ ๋Š˜๋ฆฐ๋‹ค.
                    // ๋ฐ”๋‹ค ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธด๋‹ค.
                    q.offer(new int[]{nx, ny, point[2] + 1});
                    marked[nx][ny] = true;

                    //๋‹ค๋ฅธ ์„ฌ์— ๋„์ฐฉํ–ˆ๋‹ค๋ฉด? ๋”์ด์ƒ ํƒ์ƒ‰์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
                } else if (map[nx][ny] != land) {
                    //๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ , ์ตœ์†Ÿ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค.
                    min = Math.min(min, point[2]);
                    return;
                }
            }
        }
    }

 

์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ขŒํ‘œ ๋ง๊ณ ๋„, ๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ 3๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” int[] ๋ฐฐ์—ด์„ q์— ๋“ฑ๋ก์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๊ฐ™์€ ์„ฌ์˜ ์œก์ง€์ธ ๊ฒฝ์šฐ์—๋Š”, ๋‹ค๋ฆฌ๊ธธ์ด๋Š” ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ , ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋งŒํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋ฐ”๋‹ค๋ฅผ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋‹ค๋ฆฌ๊ธธ์ด๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๋ฉฐ ํ์— ๋„ฃ์–ด์ฃผ๊ณ  bfs๋ฅผ ๊ณ„์†ํ•˜๋ฉด ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ค๊ฐ€, ๋‹ค๋ฅธ ๋ผ๋ฒจ์„ ๊ฐ€์ง„(land ๊ฐ’) ์œก์ง€๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋์„ ๋•Œ, ๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ  ์ด๋ฅผ min๊ฐ’์— ์ €์žฅํ•ด์ค€๋‹ค.

 

๊ฐ ์„ฌ๋งˆ๋‹ค bfs๋ฅผ ํ•˜๋ฉด์„œ, ์ด min ๊ฐ’์€ ๊ณ„์†ํ•ด์„œ ์ž‘์€ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ๋  ๊ฒƒ์ด๋‹ค!

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ฐฐ์—ด์„ ์—ฌ๋Ÿฌ๊ฐœ ์“ด ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , map๊ฐ’์„ ๋ฐ”๊ฟ”์„œ ํ‘ผ ์‚ฌ๋žŒ๋„ ์žˆ๊ณ  ๋‹ค์–‘ํ–ˆ์ง€๋งŒ, ๊ฐ€์žฅ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋‚ด ํ’€์ด๋ฅผ ๋ณด๊ณ  ๋‹ค๋ฅธ ๋ถ„๋“ค๋„ ์‰ฝ๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ–ˆ์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žŒ์ด๋‹ค!

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ๋ฐฑ์ค€ 4179๋ฒˆ ใ€๋ถˆ!ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 2493๋ฒˆ ใ€ํƒ‘ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 1158๋ฒˆ ใ€์š”์„ธํ‘ธ์Šค ๋ฌธ์ œใ€‘
    • [JAVA] ๋ฐฑ์ค€ 1460๋ฒˆ ใ€์—๋””ํ„ฐใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”