백준 1100번 : 하얀 칸

2yunseong·2022년 5월 10일
0

문제

체스판은 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 이므로 문제의 제한에 문제가 발생하지 않을 정도이다.

기타

이 글은 이전 블로그에서 포스팅 된 글을 옮긴 글 입니다.

profile
개발 발자국 남기기

0개의 댓글