백준(C언어)/23년 1월

(*풀이진행중)브루트 포스 - 1018번

C0MPAS 2023. 1. 12. 14:34

1월 12일(목) - 브루트 포스(1018번)

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

최초 생각 정리

- 2차원 배열을 사용해야할 것 같으므로 이중 for 문에서 i,j 이용해서 B와 W를 입력받는다

- 8x8 보드를 한 개 씩 만든 뒤에, 각 보드에서 다시 칠해야하는 수를 각각 구하기 위해서 start_of_i 와 start_of_j 라는 변수를 새롭게 만들고, (0,0)이 좌상단인 8x8보드부터 다시 칠해야하는 수를 카운팅한다

- 그렇기에 for 문은 4번 돌려야한다

- for 문의 가장 안쪽에서 change_to_B 와 change_to_W 인 2가지 경우로 나누어서 카운팅을 한 뒤에, 

  안쪽의 2개의 for 문 밖에서 change_to_B 와 change_to_W 2가지 중 작은 값으로 change 변수값을 결정한다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

(출력값이 0 만 나오는 오류 발생 중)

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int main(void)
{
	int n, m;
	scanf("%d %d", &n, &m);

	char board[50][50];

	int i, j;
	int start_of_i, start_of_j;
	int change_to_B = 0;
	int change_to_W = 0;
	int change = 31;

	for (int i = 0; i < n; i++)
	{
		scanf("%s", &board[i]);
	}

	for (start_of_i = 0; start_of_i < n - 7; start_of_i++)
	{
		for (start_of_j = 0; start_of_j < m - 7; start_of_j++)
		{

			for (i = start_of_i; i < start_of_i + 8; i++)
			{
				for (j = start_of_j; j < start_of_j + 8; j++)
				{
					if (board[i][j] == 'B')
					{
						if (board[i][j] == board[i][j + 1])
						{
							change_to_W++;
						}
						else
						{
							continue;
						}
					}

					else
					{
						if (board[i][j] == board[i][j + 1])
						{
							change_to_B++;
						}
						else
						{
							continue;
						}
					}
				}
			}

			if (change_to_W < change)
			{
				change = change_to_W;
			}

			if (change_to_B < change)
			{
				change = change_to_B;
			}
		}
	}

	printf("%d", change);

	return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ