[Java]BOJ 1388 : ๋ฐ”๋‹ฅ์žฅ์‹

2024. 12. 7. 00:08ยทAlgorithm

https://www.acmicpc.net/problem/1388

๐Ÿšฉ๋ฌธ์ œ

๐Ÿ”“๋ฌธ์ œํ•ด๊ฒฐ - BFS

FIFO - ๋จผ์ €์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ,

Queue์‚ฌ์šฉํƒ์ƒ‰์„ ๊ฐ€๋กœ๋กœ ์ง„ํ–‰, ๋จผ์ € ํƒ์ƒ‰๋œ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ๋ชจ๋‘ ํƒ์ƒ‰ ํ›„ ๋‹ค์Œ ํƒ์ƒ‰์‹œ์ž‘

 

1.bfsํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ์ „์—ญ๋ณ€์ˆ˜ : ๊ฐ€๋กœ, ์„ธ๋กœ์ด๋™๋ฐฉํ–ฅ ,๋ฐฉ๋ฌธ์—ฌ๋ถ€์ฒดํฌ ๋ฐฐ์—ด , ์œ„์น˜๊ฐ’(x,y)๋ฅผ ๋จผ์ € ์„ ์–ธํ•˜๊ณ  ์‹œ์ž‘ํ•œ๋‹ค.

 

2. main์—์„œ๋Š”2-1. ์ž…๋ ฅ๊ฐ’์„ ๋ชจ๋‘ ๋ฐ›์•„์„œ ์ €์žฅํ•˜๊ณ  ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊นŒ์ง€ ์ง€์ •ํ•ด์ค€๋‹ค.2-2. for๋ฌธ์„ ๋Œ๋ฉด์„œ ๋ฐฉ๋ฌธํ•˜์ง€์•Š์€ ๊ณณ์ด๋ผ๋ฉด ํ•ด๋‹น ์œ„์น˜๊ฐ’(x,y)๊ณผ ๋ฌธ์ž๊ฐ€ ์ €์žฅ๋œ ๋ฐฐ์—ด์„ bfsํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.2-3. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ฌดํŒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ +1ํ•ด์ค€๋‹ค(๋‚˜๋ฌดํŒ์ž๊ฐ€ ๊ฐ€๋กœ์ผ์ˆ˜๋„ ์„ธ๋กœ์ผ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น if๋ฌธ์˜ ์กฐ๊ฑด์— ๋งŒ์กฑํ•œ๋‹ค๋ฉด +1์„ ํ•ด์ฃผ๋ฉด๋จ)

 

3.bfsํ•จ์ˆ˜์—์„œ๋Š”3-1. ๋จผ์ € ๋ฐฉ๋ฌธํ•  ์œ„์น˜์ •๋ณด๋ฅผ ์ €์žฅํ•  Deque๋ฅผ ์„ ์–ธํ•œ๋‹ค.

3-2. Deque์— ์œ„์น˜์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ,ํ•ด๋‹น ์œ„์น˜์ •๋ณด๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ(true) ํ•ด์ค€๋‹ค.

3-3. ํ˜„์žฌ ๋ฌธ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๊ฐ’๋“ค์„ ์ด์šฉํ•˜์—ฌ ํ˜„์žฌ ์œ„์น˜์˜ ๋ฌธ์ž๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

3-4. while๋ฌธ์„ ํ†ตํ•ด์„œ Deque๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋ˆ๋‹ค.

 

while๋ฌธ ์•ˆ์—์„œ์˜ ๋กœ์ง

1. ํ์—์„œ ๊ฐ’์„ ๊บผ๋‚ด ํ˜„์žฌ์œ„์น˜์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” x,y๋ณ€์ˆ˜์— ๊ฐ๊ฐ ๋‹ด๋Š”๋‹ค.

2. ํ˜„์žฌ ์œ„์น˜์˜ ๋ฌธ์ž๊ฐ’์ด'-'๋ฉด ๊ฐ€๋กœํƒ์ƒ‰(y์ถ•์ด๋™), '|'๋ฉด ์„ธ๋กœ ํƒ์ƒ‰(x์ถ•์ด๋™) ์กฐ๊ฑด๋ฌธ์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

3. ์ „์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•œ ์ด๋™๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.

4. ๋ชจ๋“  ์œ„์น˜๊ฐ’์€ 0์ด์ƒ์ด๊ณ , ์ฃผ์–ด์ง„ ๋ฐฐ์—ด๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ์•ˆ๋œ๋‹ค(์ธ๋ฑ์Šค๊ฐ€ 0์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์•„๋„ ์˜ค๋ฅ˜๋‚จ) 

    ๋˜๋Š”  ํ•ด๋‹น๋ฌธ์ž๊ฐ€ ์•„๋‹๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. =>ํ•ด๋‹น ์กฐ๊ฑด์— ๊ฑธ๋ฆฌ๋ฉด ๋‹ค์Œ ์œ„์น˜๊ฐ’์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

5. ์กฐ๊ฑด์— ๊ฑธ๋ฆฌ์ง€ ์•Š์œผ๋ฉด ํ์— ํ•ด๋‹น ์œ„์น˜๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ ,  ํ•ด๋‹น ์œ„์น˜์ •๋ณด๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ํ•ด์ค€๋‹ค.

 

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

/*
* ์ž…๋ ฅ
์„ธ๋กœ๊ธธ์ด n ๊ฐ€๋กœ๊ธธ์ด m
n๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ•œ์ค„์— m๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์ฃผ์–ด์ง

* ์ถœ๋ ฅ
ํ•„์š”ํ•œ ๋‚˜๋ฌดํŒ์ž ๊ฐœ์ˆ˜ ์ถœ๋ ฅ
* */

public class Main {
    static int x, y;
    static boolean[][] check;
    static int[][] vecX = {{1, 0}, {-1, 0}}; // ์„ธ๋กœ ์ด๋™ ๋ฐฉํ–ฅ
    static int[][] vecY = {{0, 1}, {0, -1}}; // ๊ฐ€๋กœ ์ด๋™ ๋ฐฉํ–ฅ

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        x = Integer.parseInt(arr[0]);
        y = Integer.parseInt(arr[1]);

        char[][] bottom = new char[x][y]; // ๋ฌธ์ž ์ €์žฅ
        check = new boolean[x][y]; // ๋ฐฉ๋ฌธ ์ฒดํฌ ์ €์žฅ

        for (int i = 0; i < x; i++) { // ๋ฌธ์ž ์ž…๋ ฅ๋ฐ›๊ณ  ์ €์žฅ
            String str = br.readLine();
            for (int j = 0; j < y; j++) {
                bottom[i][j] = str.charAt(j);
            }
        }

        int cnt = 0;
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                if (!check[i][j]) {
                    bfs(i, j, bottom);
                    cnt++;
                }
            }
        }
        System.out.println(cnt);
    }
   //์—ฌ๊ธฐ๊นŒ์ง€๋Š” dfs์™€ ๋˜‘๊ฐ™๋‹ค 

    static void bfs(int i, int j, char[][] bottom) {
        Deque<int[]> queue = new LinkedList<>();
        queue.add(new int[]{i, j});
        check[i][j] = true; // ์‹œ์ž‘ ์œ„์น˜ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ

        char current = bottom[i][j];

        while (!queue.isEmpty()) {
            int[] currentPos = queue.poll();
            int cx = currentPos[0];
            int cy = currentPos[1];

//                    ๊ฐ€๋กœํƒ์ƒ‰ -
//        y๋Š” 0๋ณด๋‹ค๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ  ๊ธฐ์กด๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. & ์ด์–ด๋ฐ›์€ ์œ„์น˜๊ฐ€ ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†์–ด์•ผํ•œ๋‹ค & ์ด์–ด๋ฐ›์€ ๊ฐ’์ด -๋กœ ๊ฐ™์•„์•ผํ•œ๋‹ค
            if (current == '-') {
                for (int[] v : vecY) {
                    int nx = cx;
                    int ny = cy + v[1];
                    if (ny >= 0 && ny < y && !check[nx][ny] && bottom[nx][ny] == '-') {
                    // DFS์™€ ๋‹ค๋ฅธ์  , ํ ์‚ฌ์šฉ
                        queue.add(new int[]{nx, ny}); 
                        check[nx][ny] = true;
                    }
                }
            }
//        ์„ธ๋กœํƒ์ƒ‰ |
//        x ๋Š” 0๋ณด๋‹ค๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ  ๊ธฐ์กด๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. & ์ด์–ด๋ฐ›์€ ์œ„์น˜๊ฐ€ ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†์–ด์•ผํ•œ๋‹ค & ์ด์–ด๋ฐ›์€ ๊ฐ’์ด |๋กœ ๊ฐ™์•„์•ผํ•œ๋‹ค
            if (current == '|') {
                for (int[] v : vecX) {
                    int nx = cx + v[0];
                    int ny = cy;
                    if (nx >= 0 && nx < x && !check[nx][ny] && bottom[nx][ny] == '|') {
                    // DFS์™€ ๋‹ค๋ฅธ์  , ํ ์‚ฌ์šฉ
                        queue.add(new int[]{nx, ny});
                        check[nx][ny] = true;
                    }
                }
            }
        }
    }
}

 

๐Ÿ”“๋ฌธ์ œํ•ด๊ฒฐ - DFS (์žฌ๊ท€)

LIFO - ๊ฐ€์žฅ ์ตœ๊ทผ์— ํƒ์ƒ‰ํ•œ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ, Stack ์‚ฌ์šฉ

ํƒ์ƒ‰์„ ์„ธ๋กœ(์ˆ˜์ง)๋กœ ์ง„ํ–‰, ๊ฒฝ๋กœ์˜ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ๋’ค ๋Œ์•„์˜ด

 

1.์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , main ํ•จ์ˆ˜์—์„œ์˜ ๋กœ์ง์€ BFS์™€ ๋˜‘๊ฐ™๋‹ค.

 

2. DFSํ•จ์ˆ˜์—์„œ๋Š”2-1. ์ „๋‹ฌ๋ฐ›์€ ์œ„์น˜์ •๋ณด๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ(true)ํ•ด์ค€๋‹ค. //BFS์™€ ๊ฐ™์Œ

2-2. ํ˜„์žฌ ๋ฌธ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด(current)์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๊ฐ’๋“ค์„ ์ด์šฉํ•˜์—ฌ ํ˜„์žฌ ์œ„์น˜์˜ ๋ฌธ์ž๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. // BFS์™€ ๊ฐ™์Œ2-3. ํ˜„์žฌ ์œ„์น˜์˜ ๋ฌธ์ž๊ฐ’์ด '-'๋ฉด ๊ฐ€๋กœ ํƒ์ƒ‰(y์ถ• ์ด๋™), '|'๋ฉด ์„ธ๋กœ ํƒ์ƒ‰(x์ถ• ์ด๋™) ์กฐ๊ฑด๋ฌธ์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

2-4. BFS์˜ while๋ฌธ ์•ˆ์—์„œ ๋กœ์ง๊ณผ ๋˜‘๊ฐ™๋‹ค.2-5. BFS์™€ ๋‹ค๋ฅธ์ ์€ DFSํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•œ๋‹ค.

DFS์—์„œ๋Š” ๋‹ค์‹œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 2-1๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ if๋ฌธ์•ˆ์—์„œ ํ•ด์ค„ํ•„์š”๊ฐ€ ์—†๋‹ค.

(BFS์—์„œ๋Š” if๋ฌธ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ํ์— ์œ„์น˜๊ฐ’ ์ €์žฅ & ์œ„์น˜์ •๋ณด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
* ์ž…๋ ฅ
์„ธ๋กœ๊ธธ์ด n ๊ฐ€๋กœ๊ธธ์ด m
n๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ•œ์ค„์— m๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์ฃผ์–ด์ง

* ์ถœ๋ ฅ
ํ•„์š”ํ•œ ๋‚˜๋ฌดํŒ์ž ๊ฐœ์ˆ˜ ์ถœ๋ ฅ
* */
public class Main {


    static int x,y;
    static boolean[][]check;
    static int[][] vecX = {{1, 0}, {-1, 0}}; //์„ธ๋กœ์ด๋™ ๋ฐฉํ–ฅ
    static int[][] vecY = {{0, 1}, {0, -1}}; //๊ฐ€๋กœ์ด๋™๋ฐฉํ–ฅ

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String [] arr = br.readLine().split(" ");
        x = Integer.parseInt(arr[0]);
        y = Integer.parseInt(arr[1]);

        char [][] bottom = new char [x][y]; //๋ฌธ์ž์ €์žฅ
        check = new boolean[x][y]; //๋ฐฉ๋ฌธ์ฒดํฌ ์ €์žฅ

        for (int i = 0; i < x; i++) { //๋ฌธ์ž ์ž…๋ ฅ๋ฐ›๊ณ  ์ €์žฅ
            String str = br.readLine();
            for (int j = 0; j < y; j++) {
                bottom[i][j] = str.charAt(j);
            }
        }
        int cnt =0;
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                if (!check[i][j]) {
                    dfs(i,j,bottom);
                    cnt++;
                }
            }
        }
        System.out.println(cnt);

    }
    static void dfs(int i, int j,char [][]bottom){
        check[i][j] = true; //๋ฐฉ๋ฌธํ•จ
        char current = bottom[i][j];

//        ๊ฐ€๋กœํƒ์ƒ‰ -
//        y๋Š” 0๋ณด๋‹ค๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ  ๊ธฐ์กด๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. & ์ด์–ด๋ฐ›์€ ์œ„์น˜๊ฐ€ ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†์–ด์•ผํ•œ๋‹ค & ์ด์–ด๋ฐ›์€ ๊ฐ’์ด -๋กœ ๊ฐ™์•„์•ผํ•œ๋‹ค
        if(current=='-'){
            for (int[] v:vecY){
                int nx=i;
                int ny= j+v[1];
                if(ny >= 0 && ny < y && !check[nx][ny] && bottom[nx][ny] == '-'){
                // BFS์™€ ๋‹ค๋ฅธ์  , ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ
                    dfs(nx,ny,bottom);
                }
            }
        }
//        ์„ธ๋กœํƒ์ƒ‰ |
//        x ๋Š” 0๋ณด๋‹ค๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ  ๊ธฐ์กด๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. & ์ด์–ด๋ฐ›์€ ์œ„์น˜๊ฐ€ ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†์–ด์•ผํ•œ๋‹ค & ์ด์–ด๋ฐ›์€ ๊ฐ’์ด |๋กœ ๊ฐ™์•„์•ผํ•œ๋‹ค
        if(current=='|'){
            for (int[] v:vecX){
                int nx=i+v[0];
                int ny= j;
                if(nx >= 0 && nx < x && !check[nx][ny] && bottom[nx][ny] == '|'){
                // BFS์™€ ๋‹ค๋ฅธ์  , ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ
                    dfs(nx,ny,bottom);
                }
            }
        }

    }
}

๐Ÿ”“๋ฌธ์ œํ•ด๊ฒฐ - DFS (์Šคํƒ)

1.BFS์™€ ์ „๋ฐ˜์ ์œผ๋กœ ๋ชจ๋‘ ๋˜‘๊ฐ™๋‹ค.

๋‹ค๋ฅธ์ ์€ BFS๋Š” FIFO๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Deque์— ์œ„์น˜๊ฐ’์„ ๋„ฃ๊ณ  ๋นผ๊ณ  ์ž‘์—…์„ ํ•˜์˜€์ง€๋งŒ

DFS๋Š” LIFO๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Stack์— ์œ„์น˜๊ฐ’์„ ๋„ฃ๊ณ  ๋นผ๊ณ  ์ž‘์—…์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

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

/*
* ์ž…๋ ฅ
์„ธ๋กœ๊ธธ์ด n ๊ฐ€๋กœ๊ธธ์ด m
n๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ•œ์ค„์— m๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์ฃผ์–ด์ง

* ์ถœ๋ ฅ
ํ•„์š”ํ•œ ๋‚˜๋ฌดํŒ์ž ๊ฐœ์ˆ˜ ์ถœ๋ ฅ
* */

public class Main {
    static int x, y;
    static boolean[][] check;
    static int[][] vecX = {{1, 0}, {-1, 0}}; // ์„ธ๋กœ ์ด๋™ ๋ฐฉํ–ฅ
    static int[][] vecY = {{0, 1}, {0, -1}}; // ๊ฐ€๋กœ ์ด๋™ ๋ฐฉํ–ฅ

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        x = Integer.parseInt(arr[0]);
        y = Integer.parseInt(arr[1]);

        char[][] bottom = new char[x][y]; // ๋ฌธ์ž ์ €์žฅ
        check = new boolean[x][y]; // ๋ฐฉ๋ฌธ ์ฒดํฌ ์ €์žฅ

        for (int i = 0; i < x; i++) { // ๋ฌธ์ž ์ž…๋ ฅ๋ฐ›๊ณ  ์ €์žฅ
            String str = br.readLine();
            for (int j = 0; j < y; j++) {
                bottom[i][j] = str.charAt(j);
            }
        }

        int cnt = 0;
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                if (!check[i][j]) {
                    dfs_stack(i, j, bottom);
                    cnt++;
                }
            }
        }
        System.out.println(cnt);
    }

    static void dfs_stack(int i, int j, char[][] bottom) {
        Stack<int[]> stack = new Stack<>();
        stack.push(new int[]{i, j});
        check[i][j] = true; // ์‹œ์ž‘ ์œ„์น˜ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ

        char current = bottom[i][j];

        while (!stack.isEmpty()) {
            int[] currentPos = stack.pop();
            int cx = currentPos[0];
            int cy = currentPos[1];

//                    ๊ฐ€๋กœํƒ์ƒ‰ -
//        y๋Š” 0๋ณด๋‹ค๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ  ๊ธฐ์กด๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. & ์ด์–ด๋ฐ›์€ ์œ„์น˜๊ฐ€ ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†์–ด์•ผํ•œ๋‹ค & ์ด์–ด๋ฐ›์€ ๊ฐ’์ด -๋กœ ๊ฐ™์•„์•ผํ•œ๋‹ค
            if (current == '-') {
                for (int[] v : vecY) {
                    int nx = cx;
                    int ny = cy + v[1];
                    if (ny >= 0 && ny < y && !check[nx][ny] && bottom[nx][ny] == '-') {
                    // BFS์™€ ์žฌ๊ท€ํ•จ์ˆ˜์™€ ๋‹ค๋ฅธ์  , ์Šคํƒ์‚ฌ์šฉ
                        stack.push(new int[]{nx, ny});
                        check[nx][ny] = true;
                    }
                }
            }
//        ์„ธ๋กœํƒ์ƒ‰ |
//        x ๋Š” 0๋ณด๋‹ค๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ  ๊ธฐ์กด๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. & ์ด์–ด๋ฐ›์€ ์œ„์น˜๊ฐ€ ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†์–ด์•ผํ•œ๋‹ค & ์ด์–ด๋ฐ›์€ ๊ฐ’์ด |๋กœ ๊ฐ™์•„์•ผํ•œ๋‹ค
            if (current == '|') {
                for (int[] v : vecX) {
                    int nx = cx + v[0];
                    int ny = cy;
                    if (nx >= 0 && nx < x && !check[nx][ny] && bottom[nx][ny] == '|') {
                    // BFS์™€ ์žฌ๊ท€ํ•จ์ˆ˜์™€ ๋‹ค๋ฅธ์  , ์Šคํƒ์‚ฌ์šฉ
                        stack.push(new int[]{nx, ny});
                        check[nx][ny] = true;
                    }
                }
            }
        }
    }
}

 

'Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java]BOJ 1654 : ๋žœ์„  ์ž๋ฅด๊ธฐ  (0) 2025.01.15
[Java]BOJ 2776 : ์•”๊ธฐ์™•  (0) 2025.01.13
[Java]BOJ 1026 : ๋ณด๋ฌผ  (0) 2024.12.06
[Java]BOJ 16112 : 5์ฐจ ์ „์ง  (0) 2024.12.03
BOJ 1863 : ์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด๊ฑฐ  (0) 2024.12.03
'Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Java]BOJ 1654 : ๋žœ์„  ์ž๋ฅด๊ธฐ
  • [Java]BOJ 2776 : ์•”๊ธฐ์™•
  • [Java]BOJ 1026 : ๋ณด๋ฌผ
  • [Java]BOJ 16112 : 5์ฐจ ์ „์ง
m.<jj
m.<jj
  • m.<jj
    JJ
    m.<jj
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (24)
      • Study (14)
        • Python (7)
        • Java (4)
        • HTML-CSS (1)
        • error (1)
        • Redis (0)
      • Algorithm (9)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    python
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
m.<jj
[Java]BOJ 1388 : ๋ฐ”๋‹ฅ์žฅ์‹
์ƒ๋‹จ์œผ๋กœ

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