본문 바로가기
코딩테스트 준비/백준

[백준] 1388번 - 바닥 장식 [Java]

by mwzz6 2025. 2. 12.

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

 

[백준] 1388번 - 바닥 장식 [Java]
[백준] 1388번 - 바닥 장식 [Java]
[백준] 1388번 - 바닥 장식 [Java]


1.  아이디어

 

이어진 '-' 또는 '|'가 하나의 판자가 되는 상황으로 2차원 배열의 순회로 간단하게 해결할 수 있다.


2. 문제풀이

 

'-', '|'를 발견하면 가로 또는 세로방향으로 이어진 부분을 전부 찾아서 ' '으로 변경하고 판자의 개수를 세는 방식으로 구현했다.


3. 코드

 

import java.io.*;
import java.util.*;

public class Main {

    private static final char EMPTY = '\u0000';

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        char[][] map = new char[N][M];
        for (int i = 0; i < N; i++) {
            map[i] = br.readLine().toCharArray();
        }

        int cnt = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (map[i][j] == EMPTY) continue;

                if (map[i][j] == '-') {
                    int k = 0;
                    while (j + k < M && map[i][j + k] == '-') {
                        map[i][j + k] = EMPTY;
                        k++;
                    }
                } else if (map[i][j] == '|') {
                    int k = 0;
                    while (i + k < N && map[i + k][j] == '|') {
                        map[i + k][j] = EMPTY;
                        k++;
                    }
                }
                cnt++;
            }
        }

        System.out.println(cnt);
    }
}

4. 후기