본문 바로가기

Algorithm/Mathematics

BaekJoon 1652 누울 자리를 찾아라

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

소스결과 1992 KB / 0 ms

출처 Baekjoon

언어 C++ 17

분류 수학

 

설명

영식이가 누울 수 있는 자리의 갯수를 가로와 세로로 구분해서 출력해주자.

 

입력은 문자열로 주어진다. 문자 사이에 공백이 없다. 한번에 받아야 한다.

수학탭에 있지만 왜 수학문제인지 조금 궁금하다. 문자열 처리에 좀 더 가깝지 않을까 하는 의문이 들기도 한다.

가로와 세로로 구분해서 문자 X가 나오기 전까지 . 의 개수를 세서 개수가 2 이상이면 가로/세로의 수를 1 늘려주면 된다.

x가 나오기 전에 끝나는 경우가 존재 하기 때문에 다음 줄로 넘어가기전에 개수를 한번 더 처리해 주어야 한다.

 

알고리즘

1. 방의 정보를 받아온다.

2. 가로 / 세로 방향으로 X 가 나오기 전까지 . 의 개수를 센다. 2 이상이면 가로 / 세로 방향의 누울자리 수를 + 1 해준다.

3. 가로, 세로 순서로 값을 출력해 준다.

 

소스코드

#include <iostream>

using namespace std;

const short MAX = 100;

char board[MAX][MAX + 1];

int main()
{
	int n;
	int rowCount = 0, colCount = 0;

	cin >> n;

	for (int i = 0; i < n; i++)
		cin >> board[i];

	// row
	for (int i = 0; i < n; i++)
	{
		int count = 0;
		for (int j = 0; j < n; j++)
		{
			if (board[i][j] == '.')
				count++;
			else
			{
				if (count > 1)
					rowCount++;
				count = 0;
			}
		}
		if (count > 1)
			rowCount++;
	}

	// col
	for (int i = 0; i < n; i++)
	{
		int count = 0;
		for (int j = 0; j < n; j++)
		{
			if (board[j][i] == '.')
				count++;
			else
			{
				if (count > 1)
					colCount++;
				count = 0;
			}
		}
		if (count > 1)
			colCount++;
	}

	cout << rowCount << ' ' << colCount;

	return 0;
}

 

'Algorithm > Mathematics' 카테고리의 다른 글

BaekJoon 1074 Z  (0) 2019.01.29
BaekJoon 1076 저항  (0) 2019.01.21
BackJoon 1978 소수 찾기  (0) 2019.01.21
BaekJoon 1094 막대기  (0) 2019.01.10
BaekJoon 2869 달팽이는 올라가고싶다.  (0) 2019.01.05