본문 바로가기
CodingTest/백준

[c++] 백준 - 1652: 누울 자리를 찾아라

by Daybreak21 2023. 5. 10.

1652번: 누울 자리를 찾아라 (acmicpc.net)

 

1652번: 누울 자리를 찾아라

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

www.acmicpc.net

 

※문제조건 
 똑바로 연속해서 2칸 이상의 빈 칸이 존재하면 몸을 누울 수 있다
 누울 때는 무조건 벽이나 짐에 닿아야한다. 
 가로로 누울수도 있고 세로로 누울 수도 있다. 

두번째 조건에 의하여 한 줄이 통째로 비어있더라도 누울수  있는 자리는 1개이다. 

그리고 그림의 두번째 줄과 같이 중간에 짐이 있더라도 앞 뒤로 2칸 이상의 빈 칸이 있으니 카운트를 올려주어야 한다. 

 

따라서 빈칸을 세는 변수n을 선언 해놓고 n이 2가 될때만 출력값을 증가시킨다. 

 한 줄 씩 검사하다가 X를 만나면 n을 0으로 초기화 해준다. 


#include <iostream>
#include <cstring>
using namespace std;

int main() {
	int N; cin >> N;
	char** mat = new char* [N];
	for (int i = 0; i < N; i++) {
		mat[i] = new char[N];
		for (int j = 0; j < N; j++) cin >> mat[i][j];
	}

	int result = 0;
	for (int i = 0; i < N; i++) {
		int n = 0;
		for (int j = 0; j < N; j++) {
			if (mat[i][j] == 'X') n = 0;
			else {
				n++;
				if (n == 2) result++;
			}
		}
	}
	cout << result << " ";

	result = 0;
	for (int j = 0; j < N; j++) {
		int n = 0;
		for (int i = 0; i < N; i++) {
			if (mat[i][j] == 'X') n = 0;
			else {
				n++;
				if (n == 2) result++;
			}
		}
		
	}
	cout << result;

	return 0;
}