Koala - 14기/코딩테스트 준비 스터디

[백준/C++] 1652번 누울 자리를 찾아라

nunomi0 2024. 3. 31. 19:25

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

 

1652번: 누울 자리를 찾아라

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

www.acmicpc.net

 

문제

N*N(1<=N<=100) 형태로 방의 구조가 주어질 때, 영식이가 누울 수 있는 자리의 경우의 수를 출력한다. 방에 누울 경우 몸을 양 옆으로 쭉 뻗기 때문에 반드시 벽이나 짐에 닿게 된다. 가로로 누울 수 있는 자리와 세로로 누울 수 잇는 자리의 개수를 출력한다.

 

풀이

3칸이 연속해서 비어 있어도 경우의 수는 2가 아닌 1이 됨을 조심한다. 반복문을 사용하여 해결한다.

#include <iostream>
using namespace std;

int n, r = 0, c = 0;
string  arr[110];


int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}

	for (int i = 0; i < n; i++) {
		int cnt = 0;
		for (int j = 0; j< n; j++) {
			if (arr[i][j] == '.') cnt++;
			else {
				if (cnt >= 2) r++;
				cnt = 0;
			}
		}
		if (cnt >= 2) r++;
	}

	for (int i = 0; i < n; i++) {
		int cnt = 0;
		for (int j = 0; j < n; j++) {
			if (arr[j][i] == '.') cnt++;
			else {
				if (cnt >= 2) c++;
				cnt = 0;
			}
		}
		if (cnt >= 2) c++;
	}
	cout << r << ' ' << c;
}