๊ธฐ๋ก๋ฐฉ

BOJ_1388 : ๋ฐ”๋‹ฅ ์žฅ์‹ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1388 : ๋ฐ”๋‹ฅ ์žฅ์‹

Soom_1n 2022. 11. 21. 15:45

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

 

1388๋ฒˆ: ๋ฐ”๋‹ฅ ์žฅ์‹

ํ˜•ํƒ์ด๋Š” ๊ฑด์ถ•๊ฐ€์ด๋‹ค. ์ง€๊ธˆ ๋ง‰ ํ˜•ํƒ์ด๋Š” ํ˜•ํƒ์ด์˜ ๋‚จ์ž ์นœ๊ตฌ ๊ธฐํ›ˆ์ด์˜ ์ง‘์„ ๋ง‰ ์™„์„ฑ์‹œ์ผฐ๋‹ค. ํ˜•ํƒ์ด๋Š” ๊ธฐํ›ˆ์ด ๋ฐฉ์˜ ๋ฐ”๋‹ฅ ์žฅ์‹์„ ๋””์ž์ธํ–ˆ๊ณ , ์ด์ œ ๋ช‡ ๊ฐœ์˜ ๋‚˜๋ฌด ํŒ์ž๊ฐ€ ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค. ๋‚˜

www.acmicpc.net


 


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

  • n x m ๋ฐ”๋‹ฅ์—์„œ ํŒ์ž๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.
    • '-'๊ฐ€ ๊ฐ€๋กœ๋กœ ์ด์–ด์ง€๊ฑฐ๋‚˜, '|'๊ฐ€ ์„ธ๋กœ๋กœ ์ด์–ด์ง€๋ฉด ํ•˜๋‚˜์˜ ํŒ์ž์ด๋‹ค.

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

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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        String[] arr = new String[n];
        for (int i = 0; i < n; i++){                // ์ž…๋ ฅ ๋ฐ›๊ธฐ
            arr[i] = sc.next();
        }

        boolean[][] visit = new boolean[n][m];      // ํ•ด๋‹น ์ขŒํ‘œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
        int answer = 0;

        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                if (!visit[i][j]) {
                    answer++;
                    Queue<Pair> queue = new LinkedList<>();     // ํ
                    queue.add(new Pair(i, j));                  // ํ์˜ ์ฒซ ๊ฐ’
                    while (!queue.isEmpty()) {                  // BFS
                        Pair p = queue.poll();
                        visit[p.x][p.y] = true;

                        char c = arr[p.x].charAt(p.y);

                        if (c == '-') {     // '-' ์ผ ๋•Œ
                            // ์™ผ์ชฝ์ด '-'
                            if (p.y > 0 && !visit[p.x][p.y-1] && arr[p.x].charAt(p.y - 1) == '-') {
                                queue.add(new Pair(p.x, p.y - 1));
                            }
                            // ์˜ค๋ฅธ์ชฝ์ด '-'
                            if (p.y < m-1 && !visit[p.x][p.y+1] && arr[p.x].charAt(p.y + 1) == '-') {
                                queue.add(new Pair(p.x, p.y + 1));
                            }
                        }else {             // '|' ์ผ ๋•Œ
                            // ์œ„์ชฝ์ด '|'
                            if (p.x > 0 && !visit[p.x-1][p.y] && arr[p.x-1].charAt(p.y) == '|') {
                                queue.add(new Pair(p.x-1, p.y));
                            }
                            // ์•„๋ž˜์ชฝ์ด '|'
                            if (p.x < n-1 && !visit[p.x+1][p.y] && arr[p.x+1].charAt(p.y) == '|') {
                                queue.add(new Pair(p.x+1, p.y));
                            }
                        }
                    }
                }
            }
        }
        System.out.println(answer);
    }
    private static class Pair {
        int x, y;
        private Pair(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}

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

  • ์ขŒํ‘œ๋Š” Pair ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•œ๋‹ค.
  • 2์ค‘ for๋ฌธ์œผ๋กœ ํƒ€์ผ์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•˜๋ฉฐ, ์ด์–ด์ง„ ํƒ€์ผ๋“ค์„ BFS๋กœ ํƒ์ƒ‰ํ•ด visit์„ true๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
    • ํ์— ๋‚จ์€ ์›์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ด์–ด์ง„ ํƒ€์ผ๋“ค์„ ๋ชจ๋‘ ์ฐพ์€ ๊ฒƒ == ํ•˜๋‚˜์˜ ํŒ์ž

๐Ÿ”ธ end ๐Ÿ”ธ

  • BFS๋ฅผ ์—ฐ์Šตํ•˜๊ธฐ ์ข‹์€ ๋ฌธ์ œ์˜€๋‹ค.

728x90