1018 - 체스판 다시 칠하기

solution

code

#include <iostream>
using namespace std;

int real_chessboard[8][8] = { 1, 0, 1, 0, 1, 0, 1, 0,
                              0, 1, 0, 1, 0, 1, 0, 1,
                              1, 0, 1, 0, 1, 0, 1, 0,
                              0, 1, 0, 1, 0, 1, 0, 1,
                              1, 0, 1, 0, 1, 0, 1, 0,
                              0, 1, 0, 1, 0, 1, 0, 1,
                              1, 0, 1, 0, 1, 0, 1, 0,
                              0, 1, 0, 1, 0, 1, 0, 1 };

int** cut(int **cb, int rowidx, int colidx)
{
    int **size8x8 = new int*[8];
    for (int i = 0; i < 8; i++)
        size8x8[i] = new int[8];

    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            size8x8[i][j] = cb[rowidx+i][colidx+j];

    return size8x8;
}

int fix(int **cb)
{
    int count = 0, todofix;

    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            if (cb[i][j] != real_chessboard[i][j]) count++;

    todofix = (count <= 32) ? count : 64-count;
    return todofix;
}

int main()
{
    int row, column;
    cin >> row;
    cin >> column;

    int **chessboard = new int*[row];
    for (int i = 0; i < row; i++)
        chessboard[i] = new int[column];

    char color;
    int clr;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < column; j++)
        {
            cin >> color;
            // White --> 1, Black --> 0
            clr = (color == 'W') ? 1 : 0;
            chessboard[i][j] = clr;
        }
    }

    int minfix = 65;
    int tmp;
    for (int i = 0; i < row - 7; i++)
    {
        for (int j = 0; j < column - 7; j++)
        {
            tmp = fix(cut(chessboard, i, j));
            if (tmp < minfix) minfix = tmp;
        }
    }

    cout << minfix << endl;
    return 0;
}
int **arr = new int*[row]
for (int i = 0; i < row; i++)
	arr[i] = new int[col];

ref

1018번: 체스판 다시 칠하기