Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

main

[백준 - 1018번] 체스판 다시 칠하기 본문

Algorithm

[백준 - 1018번] 체스판 다시 칠하기

1984 2022. 1. 22. 20:46
  • 2차원 벡터
  • 체스판 돌려가면서 체크했다. (간단하게 하는 방법이 있을 것 같기도 하다.)
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(void)
{
	int M, N;

	// 몇 칸 짜리 보드인지
	cin >> M >> N;

	//2차원 벡터 생성 후 -> 보드 상태 넣어준다.
	vector <vector<char>> origin_board;

	for (int i = 0; i < M; i++)
	{
		char c;
		vector <char> line;
		for (int j = 0; j < N; j++)
		{
			cin >> c;
			line.push_back(c);
		}
		origin_board.push_back(line);
	}

	// 색을 바꿔야 하는 횟수
	int count;
	// 바꿔야 하는 숫자 최솟값
	int min_count = 2500;

	// 시작 위치 설정
	char first_space;
	char second_space;

	for (int o_i = 0; o_i < M; o_i++)
	{
		// 자를 사이즈가 나오는지 확인하기
		if (o_i + 8 > M) break;
		for (int o_j = 0; o_j < N; o_j++)
		{
			// 자를 사이즈가 나오는지 확인하기
			if (o_j + 8 > N) break;
			// 기준 공간에서 시작해서 8X8 확인한다. count 초기화
			// 체스판을 돌려가면서 확인한다.
			count = 0;
			for (int i = 0; i < 8; i++)
			{
				for (int j = 0; j < 8; j++)
				{
					second_space = origin_board[o_i + i][o_j + j];
					if (i == 0 && j == 0)
					{
						// 기준 공간
						first_space = second_space;
					}
					else
					{
						//기준 공간이랑 비교해서 다르면 count up 해야함.
						if (first_space != second_space) count++;
					}

					//기준 공간 설정 (다음 줄로 넘어갈 때 예외입니다.)
					if (j == 7) continue;
					if (first_space == 'B') first_space = 'W';
					else if (first_space == 'W') first_space = 'B';

				}
			}
			if (count < min_count) min_count = count;

			count = 0;
			for (int j = 7; j >= 0; j--)
			{
				for (int i = 0; i < 8; i++)
				{
					second_space = origin_board[o_i + i][o_j + j];
					if (i == 0 && j == 7)
					{
						// 기준 공간
						first_space = second_space;
					}
					else
					{
						//기준 공간이랑 비교해서 다르면 count up 해야함.
						if (first_space != second_space) count++;
					}

					//기준 공간 설정 (다음 줄로 넘어갈 때 예외입니다.)
					if (i == 7) continue;
					if (first_space == 'B') first_space = 'W';
					else if (first_space == 'W') first_space = 'B';

				}
			}
			if (count < min_count) min_count = count;

			count = 0;
			for (int j = 0; j < 8; j++)
			{
				for (int i = 7; i >= 0; i--)
				{
					second_space = origin_board[o_i + i][o_j + j];
					if (i == 7 && j == 0)
					{
						// 기준 공간
						first_space = second_space;
					}
					else
					{
						//기준 공간이랑 비교해서 다르면 count up 해야함.
						if (first_space != second_space) count++;
					}

					//기준 공간 설정 (다음 줄로 넘어갈 때 예외입니다.)
					if (i ==0) continue;
					if (first_space == 'B') first_space = 'W';
					else if (first_space == 'W') first_space = 'B';

				}
			}
			if (count < min_count) min_count = count;

			count = 0;
			for (int i = 7; i >= 0; i--)
			{
				for (int j = 7; j >= 0; j--)
				{
					second_space = origin_board[o_i + i][o_j + j];
					if (i == 7 && j == 7)
					{
						// 기준 공간
						first_space = second_space;
					}
					else
					{
						//기준 공간이랑 비교해서 다르면 count up 해야함.
						if (first_space != second_space) count++;
					}

					//기준 공간 설정 (다음 줄로 넘어갈 때 예외입니다.)
					if (j == 0) continue;
					if (first_space == 'B') first_space = 'W';
					else if (first_space == 'W') first_space = 'B';

				}
			}
			if (count < min_count) min_count = count;
		}
	}

	cout << min_count;
	return 0;
}

 

[참고 자료]

728x90

'Algorithm' 카테고리의 다른 글

[백준 - 10951번] A+B - 4  (0) 2022.01.22
[백준 - 10818번] 최소, 최대  (0) 2022.01.22
[백준 - 2675번] 문자열 반복  (0) 2022.01.22
[백준 - 2577번] 숫자의 개수  (0) 2022.01.22
[백준 - 2562번] 최댓값  (0) 2022.01.22
Comments