문제 링크입니다: 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 |