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);
}
}