"꾸준하고 완벽한 한 걸음"

PS/Baekjoon Online Judge

[백준 01388] 바닥 장식 [Java]

kimyoungrok 2025. 3. 30. 14:56
728x90

문제

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

 


풀이

주어진 보드에서 ‘|’ 또는 ‘-’ 모양의 타일을 각각 세로와 가로로 전부 연결해서 만들어지는 판자들이 몇개 인지 구하는 문제다.

판자가 아닌 타일들을 방문하면서 규칙에 따라 하나의 판자로 만들어주는 횟수를 세면 된다.

        // Solve
        int cnt = 0;
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < M; ++j) {
                if (board[i][j] != VISITED) {
                    ++cnt;
                    connect(i, j, board[i][j]);
                };
            }
        }

        // Output
        System.out.println(cnt);
    }
}

현재 타일의 종류에 따라 가로 또는 세로로 연결된 동일한 종류의 타일들을 모두 방문해주자.

만약 다른 종류의 타일이 나온다면 더 이상 연결할 수 없으므로 탐색을 중단해야 한다.

    private static void connect(int x, int y, char type) {
        if (type == '-') {
            for (int ny = y; ny < M; ++ny) {
                if (board[x][ny] == '-') {
                    board[x][ny] = VISITED;
                } else {
                    break;
                }
            }
        } else if (type == '|') {
            for (int nx = x; nx < N; ++nx) {
                if (board[nx][y] == '|') {
                    board[nx][y] = VISITED;
                } else {
                    break;
                }
            }
        }
    }

소스코드

https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/01388.java

728x90