코딩 문제
[백준] 체스판 다시 칠하기, 1018, C/C++
Zach Choi
2022. 11. 29. 23:05
728x90
반응형
포인트
- Brutal Force로 모든 케이스를 계산함
#include <stdio.h>
typedef signed long int int32_t;
typedef char char_t;
int32_t GetNeedColorChangeNumber(int32_t s32InitColumnIdx, int32_t s32InitRowIdx, char_t(*parchBadookPan)[50]);
int main()
{
const int32_t s32ChessPanSize = 8;
int32_t s32NumOfRow = 0, s32NumOfColumn = 0;
char_t archBadookPan[50][50] = { 0 };
int32_t s32NumOfColumnCase = 0, s32NumOfRowCase = 0;
int32_t s32NumOfTotalSearchCase = 0;
int32_t s32minNum = 999;
int32_t s32NumOfNeedChangeColor = 0;
// 입력
scanf("%d", &s32NumOfRow);
scanf("%d", &s32NumOfColumn);
for (int32_t s32j = 0; s32j != s32NumOfRow; ++s32j)
{
for (int32_t s32i = 0; s32i != s32NumOfColumn; ++s32i)
{
scanf("%c", &archBadookPan[s32j][s32i]);
if (archBadookPan[s32j][s32i] == '\n')
{
scanf("%c", &archBadookPan[s32j][s32i]);
}
else
{
// Do Nothing
}
}
}
// Main
s32NumOfColumnCase = s32NumOfColumn - s32ChessPanSize + 1;
s32NumOfRowCase = s32NumOfRow - s32ChessPanSize + 1;
s32NumOfTotalSearchCase = s32NumOfRowCase * s32NumOfColumnCase;
// Search All case - brutal force
for (int32_t s32RowIdx = 0; s32RowIdx != s32NumOfRowCase; ++s32RowIdx)
{
for (int32_t s32ColumnIdx = 0; s32ColumnIdx != s32NumOfColumnCase; ++s32ColumnIdx)
{
s32NumOfNeedChangeColor = GetNeedColorChangeNumber(s32ColumnIdx, s32RowIdx, archBadookPan);
if (s32NumOfNeedChangeColor < s32minNum)
{
s32minNum = s32NumOfNeedChangeColor;
}
else
{
// Do Nothing
}
}
}
printf("%d \n", s32minNum);
return 0;
}
int32_t GetNeedColorChangeNumber(
int32_t s32InitColumnIdx,
int32_t s32InitRowIdx,
char_t (*parchBadookPan)[50]
)
{
const int32_t s32ChessPanSize = 8;
int32_t s32NeedChangeInitB = 0, s32NeedChangeInitW = 0;
int32_t s32Cnt = 0;
int32_t s32RetVal = 0;
for (int32_t s32RowIdx = 0; s32RowIdx != s32ChessPanSize; ++s32RowIdx)
{
for (int32_t s32ColumnIdx = 0; s32ColumnIdx != s32ChessPanSize; ++s32ColumnIdx)
{
// Init Start B Case
if ((s32RowIdx % 2) == 0)
{
if ((s32Cnt % 2) == 0)
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'W')
{
++s32NeedChangeInitB;
}
else
{
// Do Nothing
}
}
else
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'B')
{
++s32NeedChangeInitB;
}
else
{
// Do Nothing
}
}
}
else
{
if ((s32Cnt % 2) == 0)
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'B')
{
++s32NeedChangeInitB;
}
else
{
// Do Nothing
}
}
else
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'W')
{
++s32NeedChangeInitB;
}
else
{
// Do Nothing
}
}
}
// Init Start W Case
if ((s32RowIdx % 2) == 0)
{
if ((s32Cnt % 2) == 0)
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'B')
{
++s32NeedChangeInitW;
}
else
{
// Do Nothing
}
}
else
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'W')
{
++s32NeedChangeInitW;
}
else
{
// Do Nothing
}
}
}
else
{
if ((s32Cnt % 2) == 0)
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'W')
{
++s32NeedChangeInitW;
}
else
{
// Do Nothing
}
}
else
{
if (parchBadookPan[s32InitRowIdx + s32RowIdx][s32InitColumnIdx + s32ColumnIdx] == 'B')
{
++s32NeedChangeInitW;
}
else
{
// Do Nothing
}
}
}
++s32Cnt;
}
}
if (s32NeedChangeInitB > s32NeedChangeInitW)
{
s32RetVal = s32NeedChangeInitW;
}
else
{
s32RetVal = s32NeedChangeInitB;
}
return s32RetVal;
}
728x90
반응형