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());
String st;
char[][] bang = new char[n][n];
for(int i=0; i<n; i++){
st = br.readLine();
bang[i] = st.toCharArray();
}
int garo=0; boolean flag = false;
for(int i=0; i<n; i++){
flag = false;
for(int j=1; j<n; j++){
if(bang[i][j]==bang[i][j-1] && bang[i][j]=='.'){
flag = true;
}
if(bang[i][j] == 'X'){
if(flag){
garo++;
flag = false;
}
}
if(j==n-1){
if(flag)
garo++;
}
}
}
int sero=0;
for(int i=0; i<n; i++){
flag = false;
for(int j=1; j<n; j++){
if(bang[j][i]==bang[j-1][i] && bang[j][i]=='.'){
flag = true;
}
if(bang[j][i] == 'X'){
if(flag){
sero++;
flag = false;
}
}
if(j==n-1){
if(flag)
sero++;
}
}
}
System.out.println(garo+" "+sero);
}
}
가로/세로로 연속된 2칸 이상이 있으면 +1만 해준다고 문제를 잘못 이해했다.
내가 이해한건 : ..X.. 일때 1번 누울 수 있음
-> 문제에서는 ..X.. 이라면 2번 누울 수 있다.
입력N의 범위가 최대 100으로 작으므로, 가로/세로인 경우를 각각 이중for문을 통해 구현했다.
1. 2칸 이상 연속으로 .이 나온다면
== if( bang[i][j]==bang[i][j-1] && bang[i][j]=='.' )로 표현했고,
이 경우에 flag=true로 체크했다.
2. bang[i][j]=='X' 로, X를 만난다면
flag를 체크한다. flag=true라면, 이전에 .이 2칸이상 연속해서 나왔다는 것이므로 +1
X 이후에 .이 2칸 이상 연속으로 나온 경우를 또 체크해야되기 때문에 flag=false로 바꾸어준다.
3. .....와 같이 X를 만나지 못하고 j=0~n으로 for문이 끝나는 경우를 예외처리 해주었다.
이때도 flag를 체크한다. flag=true인 경우 +1
'1d-1c > BOJ' 카테고리의 다른 글
9613_GCD 합 (JAVA) (0) | 2020.11.22 |
---|---|
1934_최소공배수 (JAVA) (0) | 2020.11.22 |
1764_듣보잡 (JAVA) (0) | 2020.11.19 |
1759_암호 만들기 (JAVA) (0) | 2020.11.18 |
2309_일곱 난쟁이 (JAVA) (0) | 2020.11.18 |