본문 바로가기

Baekjoon/C++

[C++][BOJ/백준] 2897 몬스터 트럭

 

 

Baekjoon Online Judge

 

클릭 시 문제로 이동

 

 

[문제]

해빈이가 드디어 면허를 땄다! 해빈이의 부모님은 기뻐하며 해빈이에게 첫 차로 몬스터 트럭을 사 주셨다. 해빈이는 자신의 첫 차가 강남 대로의 모든 차를 부수면서 러시 아워조차 자신을 막을 수 없다는 것을 깨닫고 기뻐했지만, 차가 다른 차들의 네 배 크기이기 때문에 주차하는 데 애를 먹고 있었다.

그걸 본 준규는 마침 강남에서 공영 주차장 아르바이트를 하고 있기 때문에 정기적으로 해빈이에게 강남 주차장 지도를 보내주기로 했다. 지도는 R행 C열의 표로 이뤄져 있다. 표의 각 칸은 빌딩('#'), 주차 된 차('X'), 또는 빈 주차 공간('.')이다. 해빈이의 차는 꽤 커서 정확히 2행 2열의 칸을 차지한다.

해빈이를 도와 가능한 주차 공간을 해빈이가 부숴야 하는 차의 수대로 모아서 보여주자. 이때 주차하기 위해 부숴야 하는 차만 고려한다. (주차 하러 가는 길에 부수는 차는 신경쓰지 않는다.) 단, 아무리 몬스터 트럭이라도 빌딩을 부술 수는 없기 때문에 빌딩이 있는 자리에는 주차를 할 수 없다.

 

 

[입력]

입력의 첫 줄에 두 정수 R과 C(2 ≤ R, C ≤ 50)가 주어진다. R은 행의 개수, C는 열의 개수이다.

두 번째 줄에는 R개의 줄에 각각 C개의 문자가 주어진다. 이 문자는 '#', 'X', '.'로만 이뤄져 있다. 'X'는 항상 영대문자이다.

 

 

[출력]

출력은 다섯 줄이다. 첫째 줄에는 해빈이가 아무 차도 부수지 않으면서 주차할 수 있는 공간의 개수, 둘째 줄은 차 한 대를 부수고 주차할 수 있는 공간의 개수, 셋째 줄은 차 두 대, 넷째 줄은 차 세 대, 다섯째 줄은 차 네 대를 부수고 주차할 수 있는 공간의 개수이다.

 

 


 

[코드]

#include <iostream>
using namespace std;

int main()
{
    int R, C, res[5] = { 0 };
    string s[50];

    cin >> R >> C;

    for (int i = 0; i < R; i++)
        cin >> s[i];

    for (int i = 0; i < R; i++)
    {
        for (int j = 0; j < C; j++)
        {
            if (i < R - 1 && j < C - 1)
            {
                int tmp = 0;

                if (s[i][j] == '#' || s[i + 1][j] == '#' || s[i][j + 1] == '#' || s[i + 1][j + 1] == '#')
                    continue;

                if (s[i][j] == 'X')
                    tmp++;

                if (s[i + 1][j] == 'X')
                    tmp++;

                if (s[i][j + 1] == 'X')
                    tmp++;

                if (s[i + 1][j + 1] == 'X')
                    tmp++;

                res[tmp]++;
            }
        }
    }

    for (int i = 0; i < 5; i++)
        cout << res[i] << '\n';

    return 0;
}