알고리즘/BOJ

백준 1652 누울 자리를 찾아라

꾸준함. 2018. 5. 11. 17:47

문제 링크입니다: https://www.acmicpc.net/problem/1652


처음에 문제를 이해하기 힘든 문제였습니다.

제가 해석한대로 다시 문제를 말하자면 짐이 없는 열이면 누울자리가 많아도 한번만 추가합니다.

그리고 짐을 기준으로 누울자리가 다시 생기면 그 때는 누울자리를 한번 더 추가해줍니다.(짐이 있는 곳 전에 충분한 공간이 있다는 가정)


#include <iostream>

#include <string>

using namespace std;

 

const int MAX = 100;

 

int N;

string room[MAX];

 

int maxRow(void)

{

        int result = 0;

 

        for (int i = 0; i < N; i++)

        {

                 int cnt = 0;

                 for (int j = 0; j < N; j++)

                 {

                         if (room[i][j] == '.')

                                 cnt++;

                         //짐이 있기 전에 누울 자리 있다면 가로 추가

                         //그리고 cnt 초기화해서 다시 센다

                         else if (room[i][j] == 'X' && cnt >= 2)

                         {

                                 result++;

                                 cnt = 0;

                         }

                         //누울 자리 없을 경우 cnt 초기화만

                         else if (room[i][j] == 'X')

                                 cnt = 0;

                 }

                 //누울자리가 많다면 가로 추가

                 if (cnt >= 2)

                         result++;

        }

        return result;

}

 

int maxCol(void)

{

        int result = 0;

 

        for (int i = 0; i < N; i++)

        {

                 int cnt = 0;

                 for (int j = 0; j < N; j++)

                 {

                         if (room[j][i] == '.')

                                 cnt++;

                         //짐이 있기 전에 누울 자리 있다면 세로 추가

                         //그리고 cnt 초기화해서 다시 센다

                         else if (room[j][i] == 'X' && cnt >= 2)

                         {

                                 result++;

                                 cnt = 0;

                         }

                         //누울 자리 없을 경우 cnt 초기화만

                         else if (room[j][i] == 'X')

                                 cnt = 0;

                 }

                 //누울 자리가 많다면 세로 추가

                 if (cnt >= 2)

                         result++;

        }

        return result;

}

 

int main(void)

{

        cin >> N;

 

        for (int i = 0; i < N; i++)

                 cin >> room[i];

 

        cout << maxRow() << " " << maxCol() << endl;

 

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

백준 2666번 벽장문의 이동  (0) 2018.05.13
백준 2616번 소형기관차  (1) 2018.05.13
백준 1789번 수들의 합  (0) 2018.05.11
백준 15483번 최소 편집  (3) 2018.05.10
백준 1254번 팰린드롬 만들기  (0) 2018.05.10