체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.
출력
첫째 줄에 문제의 정답을 출력한다.
체스판의 크기와, 가장 왼쪽 위칸의 색깔이 하얀색인 정보를 알 수 있다. 따라서 체스판을 미리 그리고, 말의 위치에 따라 해당 말이 하얀 칸 위에 있다면 카운트를 늘려준다.
한 줄씩 입력을 받을 때 마다, 해당 말이 백색 칸에 위치 해 있는지 검사 해주자.
#include <iostream>
#include <string>
using namespace std;
// . : white o :black
char board[9][9] = {
".o.o.o.o",
"o.o.o.o.",
".o.o.o.o",
"o.o.o.o.",
".o.o.o.o",
"o.o.o.o.",
".o.o.o.o",
"o.o.o.o.",
};
int mal_count = 0;
void solve(string s, int k)
{
for (int i = 0; i < 8; i++)
{
if(board[k][i]=='.' && s[i]=='F')
mal_count++;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string str;
for (int i = 0; i < 8; i++)
{
cin >> str;
solve(str, i);
}
cout<<mal_count;
return 0;
}
시간복잡도는 O(n^2) 이나 n=8 이므로 문제의 제한에 문제가 발생하지 않을 정도이다.
이 글은 이전 블로그에서 포스팅 된 글을 옮긴 글 입니다.