๊ธฐ๋ก๋ฐฉ

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

CodingTest/Java

BOJ_7576 : ํ† ๋งˆํ† 

Soom_1n 2023. 1. 30. 16:51

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

 

7576๋ฒˆ: ํ† ๋งˆํ† 

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

www.acmicpc.net



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

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

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

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

public class Main {
    public static void main(String[] args) {
        // 1) input
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int[][] arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = sc.nextInt();
            }
        }

        // 2) BFS
        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};

        int day = 0;

        Queue<Pair> que = new LinkedList<>();
        Queue<Pair> temp = new LinkedList<>();

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (arr[i][j] == 1) {
                    for (int k = 0; k < 4; k++) {
                        int x = i + dx[k];
                        int y = j + dy[k];
                        if (0 <= x && x < n && 0 <= y && y < m && arr[x][y] == 0) {
                            temp.add(new Pair(x, y));
                        }
                    }
                }
            }
        }

        while (!temp.isEmpty()) {
            day++;
            que = temp;
            temp = new LinkedList<>();
            while (!que.isEmpty()) {
                Pair p = que.poll();
                arr[p.x][p.y] = 1;
                for (int i = 0; i < 4; i++) {
                    int x = p.x + dx[i];
                    int y = p.y + dy[i];
                    if (0 <= x && x < n && 0 <= y && y < m && arr[x][y] == 0) {
                        arr[x][y] = 1;
                        temp.add(new Pair(x, y));
                    }
                }
            }
        }

        boolean flag = false;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (arr[i][j] == 0) {
                    flag = true;
                    break;
                }
            }
        }

        if (flag)
            System.out.println(-1);
        else
            System.out.println(day);
    }

    private static class Pair {
        int x, y;

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

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

  • ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Pairํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • ์ž…๋ ฅ
    • n X m ํฌ๊ธฐ ์ฐฝ๊ณ ์˜ ํ† ๋งˆํ†  ์ •๋ณด๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด arr์— ์ €์žฅํ•œ๋‹ค.
  • BFS
    • 2๊ฐœ์˜ ํ que, temp๋ฅผ ์„ ์–ธํ•œ๋‹ค.
    • temp์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•ด, ๋จผ์ € arr๋ฅผ ์ˆœํšŒํ•œ๋‹ค.
      • ๊ฐ’์ด 1์ด๋ฉด ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํ™•์ธํ•ด ์•ž์œผ๋กœ ์ต์„ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      • ์•ž์œผ๋กœ ์ต์„ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ๋ฅผ temp์— ๋„ฃ์–ด์ค€๋‹ค.
    • ํ temp๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
      • ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„๋•Œ ๊นŒ์ง€ ํ•„์š”ํ•œ ๋‚ ์งœ day ๋ณ€์ˆ˜๋ฅผ +1 ํ•œ๋‹ค.
      • que์— temp๋ฅผ ๋ณต์‚ฌํ•˜๊ณ , temp๋Š” ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
      • ํ que๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
        • que์˜ ์›์†Œ๋ฅผ pollํ•œ๋‹ค.
        • ํ•ด๋‹น ์ขŒํ‘œ์˜ ๊ฐ’์„ 1๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. (temp์˜ ์ดˆ๊ธฐํ™” ๋•Œ๋ฌธ์ด๋ฏ€๋กœ, day == 1์—์„œ๋งŒ ์‹คํ–‰ ๋จ)
        • ์ƒํ•˜์ขŒ์šฐ 4๋ฐฉํ–ฅ์„ ํ™•์ธํ•œ๋‹ค.
          • ์ƒํ•˜์ขŒ์šฐ ์ธ๋ฑ์Šค๊ฐ€ ์ฐฝ๊ณ  ๋ฒ”์œ„ ๋‚ด์ด๋ฉฐ ๊ฐ’์ด 0์ด๋ฉด,
            ํ•ด๋‹น ์ขŒํ‘œ์˜ ๊ฐ’์„ 1๋กœ ๋ฐ”๊พธ๊ณ  temp์— Pair๊ฐ์ฒด ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์ถœ๋ ฅ
    • ์ฐฝ๊ณ  arr๋ฅผ ์ˆœํšŒํ•ด ๋œ์ต์€ ํ† ๋งˆํ†  (0)์ด ๋‚จ์•„์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      • ๋‚จ์•„์žˆ์œผ๋ฉด -1, ์—†์œผ๋ฉด day๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๊ณจ๋“œ 5 ์น˜๊ณ ๋Š” ๋น„๊ต์  ์‰ฌ์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
    • BFS์— ์ต์ˆ™ํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ์ด์ „์— ํ•œ ๋ฒˆ ๋ดค์–ด์„œ ๊ทธ๋Ÿฐ๋“ฏ ํ•˜๋‹ค.
  • ์ฒ˜์Œ ํ temp์— ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ, BFS์˜ ์•ˆ์ชฝ while ์ฒ˜๋Ÿผ ์ขŒํ‘œPair๊ฐ์ฒด๋ฅผ ๋„ฃ์œผ๋ฉด์„œ ๊ฐ’์„ 1๋กœ ๋ฐ”๊ฟจ๋”๋‹ˆ ๋‹ค์Œ for๋ฌธ์— ์˜ํ–ฅ์ด ๊ฐ”๋‹ค.
    • ๊ทธ๋ž˜์„œ BFS ์•ˆ์ชฝ while๋ฌธ์— arr[p.x][p.y] = 1์ด๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ, day๊ฐ€ 1์ผ๋•Œ๋งŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ์•„์‰ฌ์› ๋‹ค.
    • ๊ทธ๋ ‡๋‹ค๊ณ  ๊ฐ€์žฅ ์•ˆ์ชฝ if๋ฌธ์—์„œ 1์„ ๋„ฃ์–ด์ฃผ๋Š”๊ฑธ ๋นผ๋ฉด ์ค‘๋ณต์ด ๋งŽ์•„์ง„๋‹ค.
  • ๋ฌธ์ œ ํŒŒ์•… ๋ฐ ์ฝ”๋”ฉ ์„ค๊ณ„๋ฅผ ์ ์–ด๊ฐ€๋ฉฐ ํ’€์ดํ–ˆ์ง€๋งŒ, ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„ ์•„์‰ฝ๋‹ค.
    • ์•„์ง ๋ฌธ์ œ๋ฅผ ์ ์–ด๊ฐ€๋ฉฐ ํ‘ธ๋Š”๊ฒŒ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋ฐ˜๋ก€๋„ ๋งŒ๋“ค์–ด๋ดค์œผ๋ฉด ์ข‹์•˜์„ํ…๋ฐ ๋’ท์‹ฌ์ด ์ข€ ๋ถ€์กฑํ–ˆ๋‹ค.
  • ์งˆ์˜ ์‘๋‹ต์—์„œ ๋‹ต๋ณ€์„ ์ ์–ด๋ดค๋Š”๋ฐ, ์ˆ˜์ •ํ•œ ์งˆ๋ฌธ์ž๋ถ„ ์ฝ”๋“œ๊ฐ€ 2๋ฐฐ ๋” ๋นจ๋ž๋‹ค...

728x90