๊ธฐ๋ก๋ฐฉ

BOJ_7569 : ํ† ๋งˆํ†  ๋ณธ๋ฌธ

CodingTest/Java

BOJ_7569 : ํ† ๋งˆํ† 

Soom_1n 2023. 2. 3. 09:15

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

 

7569๋ฒˆ: ํ† ๋งˆํ† 

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

www.acmicpc.net



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

  • H x N x M ํฌ๊ธฐ์˜ ์ฐฝ๊ณ ์— ์ต๊ฑฐ๋‚˜ ๋œ ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. 
    • ์ต์€ ํ† ๋งˆํ† ๋Š” ์ƒํ•˜์ขŒ์šฐ์ „ํ›„์˜ ๋œ ์ต์€ ํ† ๋งˆํ† ๋ฅผ ๋‹ค์Œ ๋‚  ์ต๊ฒŒ ํ•œ๋‹ค.
    • ๋นˆ ์นธ๋„ ์žˆ๋‹ค.
    • ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ ๊นŒ์ง€ ์ตœ์†Œ ๋ฉฐ์น ์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋ชจ๋‘ ์ต์ง€ ๋ชปํ•˜๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • BFS๋ฅผ ํ†ตํ•ด ์ต์€ ํ† ๋งˆํ†  ์˜† ๋œ ์ต์€ ํ† ๋งˆํ† ๋“ค์ด ๋ชจ๋‘ ์ต์„ ๋•Œ ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ๋‚ ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ํ์—์„œ ๋ฐฉ๊ธˆ ์ต์€ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ๋ฅผ ๊บผ๋‚ธ๋‹ค.
    • ๊บผ๋‚ธ ํ† ๋งˆํ†  ์ฃผ๋ณ€์˜ ๋œ ์ต์€ ํ† ๋งˆํ† ์˜ ๊ฐ’์„ ํ˜„์žฌ ๊ฐ’+1 ๋กœ ๋ฐ”๊พธ๊ณ , ์ขŒํ‘œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
    • ํ๊ฐ€ ๋นŒ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ํ† ๋งˆํ†  ์ฐฝ๊ณ ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • 0์ด ์žˆ์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋ชจ๋‘ ์ต์„ ์ˆ˜ ์—†์Œ)

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

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // input
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int h = sc.nextInt();
        int[][][] arr = new int[h][n][m];

        Queue<Tomato> que = new LinkedList<>();

        for (int i = 0; i < h; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < m; k++) {
                    arr[i][j][k] = sc.nextInt();
                    if (arr[i][j][k] == 1)
                        que.add(new Tomato(j, k, i));
                }
            }
        }

        // BFS
        //          ์ „ ์šฐ ํ›„ ์ขŒ ์ƒ ํ•˜
        int[] dx = {-1, 0, 1, 0, 0, 0};
        int[] dy = {0, 1, 0, -1, 0, 0};
        int[] dz = {0, 0, 0, 0, 1, -1};

        while(!que.isEmpty()) {
            Tomato tomato = que.poll();

//            System.out.println(tomato.h + " " + tomato.n + " " + tomato.m);
//            print(arr);


            for (int i = 0; i < dx.length; i++) {
                int x = tomato.n + dx[i];
                int y = tomato.m + dy[i];
                int z = tomato.h + dz[i];

                if (0 <= x && x < n &&
                    0 <= y && y < m &&
                    0 <= z && z < h &&
                    arr[z][x][y] == 0) {
                    arr[z][x][y] = arr[tomato.h][tomato.n][tomato.m] + 1;
                    que.add(new Tomato(x,y,z));
                }
            }
        }
//        print(arr);

        System.out.println(tomato(arr));

    }
    private static int tomato(int[][][] arr) {
        int max = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                for (int k = 0; k < arr[i][j].length; k++) {
                    if (arr[i][j][k] == 0)
                        return -1;
                    if (arr[i][j][k] > max)
                        max = arr[i][j][k];
                };
            }
        }
        return max-1;
    }

    private static class Tomato {
        int n, m, h;

        public Tomato(int n, int m, int h) {
            this.n = n;
            this.m = m;
            this.h = h;
        }
    }
    private static void print(int[][][] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                for (int k = 0; k < arr[i][j].length; k++) {
                    System.out.print(arr[i][j][k] + " ");
                }
                System.out.println();
            }
            System.out.println("\n----------------------------------------\n");
        }
        System.out.println("\n==========================================\n");
    }
}

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

  • ์ฐฝ๊ณ ์˜ ๋†’์ด h, ์„ธ๋กœ ๋„ˆ๋น„ n, ๊ฐ€๋กœ ๋„ˆ๋น„ h๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ์ฐฝ๊ณ  ๋ฐฐ์—ด arr์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
    • ํ๋ฅผ ๋งŒ๋“ค์–ด์„œ arr์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ 1์ธ ์ขŒํ‘œ๋ฅผ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.
    • ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Tomato ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด h, n, m ๊ฐ’์„ ์†์„ฑ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
  • BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ์ขŒํ‘œ ์ด๋™์„ ์œ„ํ•ด ์ „์ขŒํ›„์šฐ์ƒํ•˜ ๋ฐฉํ–ฅ์˜ h,n,m ์ธ๋ฑ์Šค ๋ณ€ํ™” ๋ฐฐ์—ด dx, dy, dz๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
    • ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
      • ํ์—์„œ Tomato ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ poll() ํ•œ๋‹ค.
      • 6๋ฐฉํ–ฅ์˜ h, m, n ์ด๋™์„ ํ™•์ธํ•ด์„œ ์ฐฝ๊ณ  ๋ฒ”์œ„ ๋‚ด์ด๋ฉฐ ๊ฐ’์ด 0์ด๋ฉด ํ˜„์žฌ ๊ฐ’+1์„ ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ํ์— ์ €์žฅํ•œ๋‹ค.
  • arr์— 0์ด ๋‚จ์•„์žˆ์œผ๋ฉด -1์„ ์ถœ๋ ฅํ•˜๊ณ , ์—†๋‹ค๋ฉด arr์˜ ์›์†Œ ์ค‘ ์ตœ๋Œ€๊ฐ’-1์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ด์ „ ํ† ๋งˆํ† ๋Š” ํ๋ฅผ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณต์‚ฌํ•˜๋ฉฐ ํ’€์ดํ–ˆ๋Š”๋ฐ, arr์— ๊ฐ’์„ ๋ˆ„์ ํ•˜๋Š” ๋ฐฉ์‹์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์ด๋ฒˆ์— ์ ์šฉํ•ด๋ณด์•˜๋‹ค.
    • BFS์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์•„์ฃผ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค.
  • print๋ฉ”์„œ๋“œ๋Š” ๋ณดํ†ต ์ง€์šฐ๋Š”๋ฐ, ์ด๋ฒˆ์—” ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์˜ฌ๋ ธ๋‹ค.
    • ์ƒ๊ฐ๋ณด๋‹ค ๋‚˜์˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์„œ ์ฝ”๋“œ์— ๋‚จ๊ฒจ๋‘๋ ค๊ณ  ํ•œ๋‹ค.
  • ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋”๋‹ˆ ์ ์„ ๊ฒƒ๋“ค์ด ๋งŽ์ง€ ์•Š์•˜๋‹ค.
    • ๊ณ„์† ๊ฐ„๋‹จํžˆ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์—ฐ์Šตํ•  ์ƒ๊ฐ์ด๋‹ค.

728x90