OJ

[BOJ] 1652 누울 자리를 찾아라 (JAVA)

P3PP4 2023. 6. 5. 10:00

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

 

1652번: 누울 자리를 찾아라

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

www.acmicpc.net

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

public class Main {
	
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        char[][] map = new char[N][N];
        for (int i = 0; i < N; i++) {
            map[i] = br.readLine().toCharArray();
        } // end of input

        boolean[][][] visited = new boolean[2][N][N];
        int hor = 0;
        int ver = 0;

        // 가로
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N - 1; j++) {
                if (!visited[0][i][j] && !visited[0][i][j + 1] && map[i][j] == '.' && map[i][j + 1] == '.') {
                    visited[0][i][j] = true;
                    hor++;
                    int nj = j + 1;
                    while (nj < N && map[i][nj] == '.') {
                        visited[0][i][nj++] = true;
                    }
                }
            }
        }

        // 가로
        for (int i = 0; i < N - 1; i++) {
            for (int j = 0; j < N; j++) {
                if (!visited[1][i][j] && !visited[1][i + 1][j] && map[i][j] == '.' && map[i + 1][j] == '.') {
                    visited[1][i][j] = true;
                    ver++;
                    int ni = i + 1;
                    while (ni < N && map[ni][j] == '.') {
                        visited[1][ni++][j] = true;
                    }
                }
            }
        }

        System.out.print(hor + " " + ver);

    }
	
}