백준 바닥 장식

KIMYEONGJUN·2026년 2월 21일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 방 바닥의 세로 크기N과 가로 크기 M이 주어진다.
둘째 줄부터 N개의 줄에 M개의 문자가 주어진다.
이것은 바닥 장식 모양이고, '-‘와 ’|‘로만 이루어져 있다.
N과 M은 50 이하인 자연수이다.

첫째 줄에 문제의 정답을 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 통해 입력을 빠르게 받는다.
먼저 입력을 읽어 방의 세로 크기 N, 가로 크기 M을 저장한다.
그 다음 N줄을 읽으면서 2차원 char 배열 floor에 저장해 방 바닥 모양을 나타내도록 했다.
count 변수로 필요한 판자 개수를 센다.
가로 방향 검사:
각 행(가로줄)을 순회하면서 현재 문자가 '-' 인 경우를 확인한다.
이때, 현재 위치가 첫 열이거나 바로 왼쪽 문자가 '-'가 아니라면, 즉 연속된 판자의 시작점이므로 카운트를 증가한다.
연속된 '-'는 하나의 판자가 되기 때문이다.
세로 방향 검사:
각 열을 순회하면서 현재 문자가 '|' 인 경우를 본다.
현재 행이 맨 위이거나 바로 위 문자가 '|'가 아니라면 새 판자 시작으로 카운트를 증가한다.
마지막에 count는 가로 방향으로 필요한 판자 수와 세로 방향으로 필요한 판자 수의 합이 된다.
출력 후 종료한다.
마지막에 리소스 누수를 막기 위해 br.close()로 스트림을 닫는다.

코드로 구현

package baekjoon.baekjoon_33;

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

// 백준 1388번 문제
public class Main1305 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] size = br.readLine().split(" ");
        int N = Integer.parseInt(size[0]);
        int M = Integer.parseInt(size[1]);

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

        int count = 0;

        // 가로 방향 '-' 판자 세기
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (floor[i][j] == '-') {
                    // 현재 칸이 '-'이고, 맨 왼쪽이거나 바로 왼쪽이 '-'가 아니면 새 판자 시작
                    if (j == 0 || floor[i][j - 1] != '-') {
                        count++;
                    }
                }
            }
        }

        // 세로 방향 '|' 판자 세기
        for (int j = 0; j < M; j++) {
            for (int i = 0; i < N; i++) {
                if (floor[i][j] == '|') {
                    // 현재 칸이 '|'이고, 맨 위거나 바로 위가 '|'가 아니면 새 판자 시작
                    if (i == 0 || floor[i - 1][j] != '|') {
                        count++;
                    }
                }
            }
        }

        System.out.println(count);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글