끄적끄적 코딩
article thumbnail

누울 수 있는 자리를 찾는 문제입니다.

.이 빈공간이고 X가 짐입니다.

가로줄과 세로줄을 각각 체크했습니다.
가로줄을 볼때 '.'이 연속해서 2개가 나타나면 카운트를 증가시키고 flag를 false로 줬습니다.
그리고 짐이 나타나면 flag를 true로 주고 위의 작업을 반복했습니다.

세로줄도 마찬가지로 해서 총 카운트를 출력했습니다.

 

#include <iostream>
#include <algorithm>
#include <string>	
using namespace std;

int n;
int countM;
int countN;
char map[110][110];
string s;

void checkM(int x)
{
	bool flag = false;
	for (int i = 0; i < n; ++i) {
		if (!flag && map[i][x] == '.' && map[i + 1][x] == '.') {
			++countM;
			flag = true;
		}
		if (flag && map[i][x] == 'X') {
			flag = false;
		}
	}
}

void checkN(int x)
{
	bool flag = false;
	for (int i = 0; i < n; ++i) {
		if (!flag && map[x][i] == '.' && map[x][i + 1] == '.') {
			++countN;
			flag = true;
		}
		if (flag && map[x][i] == 'X') {
			flag = false;
		}
	}
}

int main(int argc, char *argv[])
{
	countM = 0;
	countN = 0;

	cin >> n;

	for (int i = 1; i <= n; ++i) {
		cin >> s;
		for (int j = 1; j <= n; ++j) {
			map[i][j] = s[j - 1];
		}
	}

	for (int i = 1; i <= n; ++i) {
		checkM(i);
	}
	for (int i = 1; i <= n; ++i) {
		checkN(i);
	}

	cout << countN << " " << countM << endl;

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 14503번 로봇 청소기  (0) 2019.10.27
[C++] 백준 10569번 다면체  (0) 2019.10.25
[C++] 백준 1357번 뒤집힌 덧셈  (0) 2019.10.24
[C++] 백준 2805번 나무 자르기  (0) 2019.10.15
[C++] 백준 2512번 예산  (0) 2019.10.15

검색 태그