์šฐ๊ทœ์ด์ธ์šฐ์œค
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] ๋ฐฑ์ค€ 4179๋ฒˆ ใ€๋ถˆ!ใ€‘

2022. 12. 26. 20:50


 

์˜ˆ์ œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ๋‹ค.

 

๋จผ์ €, ์ด ๋ฌธ์ œ๋Š” ๋‹น์—ฐํžˆ BFS๋กœ ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค. BFS๋ฅผ ์‹œํ–‰ํ•  ๋•Œ, ํ์— ๋ฌด์กฐ๊ฑด J๊ฐ€ ์ œ์ผ ์ฒซ๋ฒˆ์งธ๋กœ ๋“ค์–ด๊ฐ€์„œ, ๋จผ์ € BFS ํƒ์ƒ‰์„ ํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ fire ์ด๋ผ๋Š” ํ์—๋Š” ๋ถˆ์˜ ์œ„์น˜๋ฅผ ๋จผ์ € ๋‹ด๊ณ , bfs์— ์‚ฌ์šฉํ•  q๋ผ๋Š” ํ์—๋Š” J์œ„์น˜๋ฅผ ๋‹ด์•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ , fire์— ๋‹ด์•„ ๋‘” ๋ถˆ์˜ ์œ„์น˜๋ฅผ q์— ๋‹ด์•˜๋‹ค.

 

J๋Š” BFS ํƒ์ƒ‰ ๊ณผ์ •์—์„œ [.] ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, F(๋ถˆ)์˜ ๊ฒฝ์šฐ๋Š” J์ธ ๊ฒฝ์šฐ์—๋„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ, J ์˜†๊นŒ์ง€ F๊ฐ€ ๋‹ค๊ฐ€์™”์ง€๋งŒ, J๊ฐ€ ์›€์ง์ผ ํ„ด์ด๋ฏ€๋กœ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์œ„ ๊ฒฝ์šฐ์—๋Š” J๊ฐ€ ๊ฒฝ๊ณ„์„  ๊นŒ์ง€ ๋„๋‹ฌํ–ˆ์ง€๋งŒ, F๊ฐ€ ์›€์ง์ผ ํ„ด์ด ์ง„ํ–‰๋˜๋ฉด, ํƒˆ์ถœํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ๋ฅผ ์—ผ๋‘ํ•ด๋‘๊ณ  ๊ตฌํ˜„์„ ํ•ด์•ผํ•œ๋‹ค. ( ์ด ๋ฐ˜๋ก€ ๋•Œ๋ฌธ์— ๊ฒ๋‚˜ ๊ณ ์ƒํ–ˆ๋‹ค..)

 

ํ•ญ์ƒ ๋ถˆ๋ณด๋‹ค J๊ฐ€ ๋จผ์ € ์›€์ง์ด๋„๋ก ํ์— ๋‹ด์•˜๊ธฐ ๋•Œ๋ฌธ์—, J๊ฐ€ ๊ฒฝ๊ณ„์„ ์— ๋„๋‹ฌํ–ˆ์„ ์‹œ์ ์— ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ์ขŒํ‘œ์— F๊ฐ€ ์—†์œผ๋ฉด 100% ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜ ์ •์˜ํ•ด์„œ ์ฒดํฌํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

ํ์— J ๋จผ์ € ๋‹ด๊ณ , ํƒˆ์ถœ ์กฐ๊ฑด๋งŒ ์ž˜ ์„ค์ •ํ•˜๋ฉด ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์•„๋‹ ๊ฒƒ์ด๋‹ค!

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

public class Main {

    static int row;
    static int column;
    static char[][] map;
    static int[][] time;
    static int[] dr = {1, -1, 0, 0};
    static int[] dc = {0, 0, 1, -1};
    static boolean isEscape;
    static int ans;
    static Queue<int[]> q = new LinkedList<>();
    static Queue<int[]> fire = new LinkedList<>();

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        row = Integer.valueOf(input[0]);
        column = Integer.valueOf(input[1]);
        map = new char[row][column];
        time = new int[row][column];
        isEscape = false;


        for (int i = 0; i < row; i++) {
            String info = br.readLine();
            for (int j = 0; j < column; j++) {
                map[i][j] = info.charAt(j);

                if (map[i][j] == 'J') {

                    time[i][j] = 1;

                    // ์ฒ˜์Œ ๋ฐฐ์น˜๋ถ€ํ„ฐ ๊ฒฝ๊ณ„์„ ์— ์žˆ๋Š” ๊ฒฝ์šฐ, 1๋ถ„์œผ๋กœ ๋ฐ”๋กœ ํƒˆ์ถœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
                    if (i == 0 || i == row - 1 || j == 0 || j == column - 1) {
                        System.out.println(1);
                        return;
                    }
                    q.offer(new int[]{i, j});
                }
                if (map[i][j] == 'F') {
                    fire.offer(new int[]{i, j});
                }
            }

        }

		// fire ์— ๋‹ด์•„๋‘” ์œ„์น˜ ์ •๋ณด๋ฅผ q์— ๋ชจ์€๋‹ค.
        while(!fire.isEmpty()){
            q.offer(fire.poll());
        }

        bfs();

        // bfs ์ดํ›„, ํƒˆ์ถœ ๋ถˆ๊ฐ€๋Šฅ ํŒ๋‹จ์ด๋ฉด IMPOSSIBLE ์ถœ๋ ฅ

        if (!isEscape) {
            System.out.println("IMPOSSIBLE");
        } else {
            System.out.println(ans);
        }


    }

    static boolean checkNearFire(int r, int c) {
        // ๊ฒฝ๊ณ„์„ ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ธ์ ‘ํ•œ ๊ณณ์— ๋ถˆ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
        for (int i = 0; i <= 3; i++) {
            int checkR = r + dr[i];
            int checkC = c + dc[i];
            if ((0 <= checkR && checkR < row) && (0 <= checkC && checkC < column)) {
                if (map[checkR][checkC] == 'F') {
                    return true;
                }
            }
        }
        return false;
    }

    static void bfs() {
        while (!q.isEmpty()) {
            int[] point = q.poll();
            int r = point[0];
            int c = point[1];

            for (int i = 0; i <= 3; i++) {
                int nr = r + dr[i];
                int nc = c + dc[i];
                if ((0 <= nr && nr < row) && (0 <= nc && nc < column)) {
                    if (map[r][c] == 'J' && map[nr][nc] == '.') {
                        time[nr][nc] = time[r][c] + 1;
                        map[nr][nc] = 'J';
                        q.offer(new int[]{nr, nc});

                        if ((nr == 0 || nr == row - 1 || nc == 0 || nc == column - 1)) {
                            ans = time[nr][nc];

                            if (checkNearFire(nr, nc)) {
                                return;
                            }

                            isEscape = true;
                            return;
                        }

                    } else if (map[r][c] == 'F' && (map[nr][nc] == '.' || map[nr][nc] == 'J')) {
                        map[nr][nc] = 'F';
                        q.offer(new int[]{nr, nc});
                    }
                }
            }
        }
    }
}
    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํƒ/ํ -ใ€ํ”„๋ฆฐํ„ฐใ€‘
    • [JAVA] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ•ด์‹œ -ใ€๋ฒ ์ŠคํŠธ์•จ๋ฒ”ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 2493๋ฒˆ ใ€ํƒ‘ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 2146๋ฒˆ ใ€๋‹ค๋ฆฌ ๋งŒ๋“ค๊ธฐใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

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