백준 누울 자리를 찾아라

KIMYEONGJUN·2025년 3월 10일
post-thumbnail

문제

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

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다.
그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다.

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

입력 처리: BufferedReader와 StringBuilder를 사용하여 입력을 효율적으로 처리한다.
방 크기 및 구조 저장: 입력 받은 방의 크기와 구조를 2차원 배열 room에 저장한다.
가로 계산: 각 행마다 빈 칸(.)의 연속된 개수를 세어 2개 이상이면 카운트해준다.
세로 계산: 각 열마다 같은 방식으로 빈 칸의 개수를 세어 카운트해준다.
결과 출력: 가로와 세로로 누울 수 있는 자리의 수를 한 번에 출력한다.

코드로 구현

package baekjoon.baekjoon_27;

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

// 백준 1652번 문제
public class Main956 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        char[][] room = new char[N][N];

        for(int i = 0; i < N; i++) {
            room[i] = br.readLine().toCharArray();
        }

        int horizontal = 0;
        int vertical = 0;

        // 가로로 누울 수 있는 자리 계산
        for(int i = 0; i < N; i++) {
            int count = 0;
            for(int j = 0; j < N; j++) {
                if(room[i][j] == '.') {
                    count++;
                } else {
                    if(count >= 2) {
                        horizontal++;
                    }
                    count = 0;
                }
            }
            if(count >= 2) {
                horizontal++;
            }
        }

        // 세로로 누울 수 있는 자리 계산
        for(int j = 0; j < N; j++) {
            int count = 0;
            for(int i = 0; i < N; i++) {
                if(room[i][j] == '.') {
                    count++;
                } else {
                    if(count >= 2) {
                        vertical++;
                    }
                    count = 0;
                }
            }
            if(count >= 2) {
                vertical++;
            }
        }

        sb.append(horizontal).append(" ").append(vertical);
        System.out.println(sb);
        br.close();
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글