[BOJ] 1018๋ฒˆ | ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ (C++)

2023. 4. 13. 19:47ใ†Coding Test/BOJ

๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.

www.acmicpc.net

 

 

๋ฌธ์ œ ์„ค๋ช…

์ง€๋ฏผ์ด๋Š” ์ž์‹ ์˜ ์ €ํƒ์—์„œ MN๊ฐœ์˜ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” M×N ํฌ๊ธฐ์˜ ๋ณด๋“œ๋ฅผ ์ฐพ์•˜๋‹ค. ์–ด๋–ค ์ •์‚ฌ๊ฐํ˜•์€ ๊ฒ€์€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” ํฐ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ๋ณด๋“œ๋ฅผ ์ž˜๋ผ์„œ 8×8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

์ฒด์ŠคํŒ์€ ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰์ด ๋ฒˆ๊ฐˆ์•„์„œ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ฐ ์นธ์ด ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰ ์ค‘ ํ•˜๋‚˜๋กœ ์ƒ‰์น ๋˜์–ด ์žˆ๊ณ , ๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ •์˜๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ฒด์ŠคํŒ์„ ์ƒ‰์น ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘ ๊ฐ€์ง€๋ฟ์ด๋‹ค. ํ•˜๋‚˜๋Š” ๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋Š” ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ์ด๋‹ค.

๋ณด๋“œ๊ฐ€ ์ฒด์ŠคํŒ์ฒ˜๋Ÿผ ์น ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์–ด์„œ, ์ง€๋ฏผ์ด๋Š” 8×8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ์ž˜๋ผ๋‚ธ ํ›„์— ๋ช‡ ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ์น ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ 8*8 ํฌ๊ธฐ๋Š” ์•„๋ฌด๋ฐ์„œ๋‚˜ ๊ณจ๋ผ๋„ ๋œ๋‹ค. ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.

 


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 


์˜ˆ์ œ ์ž…์ถœ๋ ฅ

 


ํ’€์ด ์ „๋žต

๋ธŒ๋ฃจํŠธ ํฌ์Šค๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. \(8 \times 8\) ์ฒด์ŠคํŒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ์ƒ‰๊น”์„ ๋ฐ”๊ฟ” ์น ํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ, ํ–‰(๊ฐ€๋กœ)์—์„œ ์ด์ „ ์ƒ‰๊น”๊ณผ ๋‹ค์Œ ์ƒ‰๊น”์ด ๊ฐ™์œผ๋ฉด ์•ˆ ๋˜๊ณ , ์—ด(์„ธ๋กœ)์—์„œ๋„ ๊ฐ™์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

 

์ €๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ์„ธ์›Œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€๋กœ๋กœ ํ•œ ์นธ์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ, ์ด์ „ ์ƒ‰๊น”๊ณผ ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ์นธ์˜ ์ƒ‰๊น”์ด ๊ฐ™์„ ๊ฒฝ์šฐ ์นด์šดํŠธ ์ฆ๊ฐ€
  • ๋‹ค์Œ ํ–‰์œผ๋กœ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ƒ์ด ์ด์ „ ํ–‰์˜ ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ƒ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ ์นด์šดํŠธ ์ฆ๊ฐ€
BWBWBWBW   // ๋งˆ์ง€๋ง‰์œผ๋กœ ์ €์žฅ๋œ ์ด์ „ ์ƒ‰๊น”์€ W
WBWBWBWB   // 1๋ฒˆํ–‰์˜ ์ฒซ ๋ฒˆ์งธ ์ƒ‰๊น”(B)์™€ ๋‹ค๋ฅธ ์ƒ‰์ด์–ด์•ผ ํ•œ๋‹ค. (์ฆ‰, ์ด์ „ ํ–‰์˜ ๋งˆ์ง€๋ง‰ ์ƒ‰๊น”์˜ ์ƒ‰๊ณผ ๊ฐ™์•„์•ผํ•จ)
........
  • ์ฒด์Šค์˜ ์‹œ์ž‘ ์ƒ‰์ƒ(์ œ์ผ ์™ผ์ชฝ ์œ„)์ด ๋‹ค๋ฅธ ์ƒ‰์ผ ๊ฒฝ์šฐ์—๋„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ง„ํ–‰
  • ์ „๋ถ€ ์ˆœํšŒ ํ›„, ๊ฐ€์žฅ ์ตœ์†Œ์˜ ๊ฒฝ์šฐ์˜ ์นด์šดํŠธ๋งŒ ์ €์žฅ ํ›„ ์ถœ๋ ฅ

 


์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;

void Search(const vector<string>& field, int startRowIdx, int startColumnIdx, const int chessboardSize, int& minCount)
{
	const int MAX_ROW = field.size();
	const int MAX_COLUMN = field[0].length();

	if (startRowIdx + chessboardSize > MAX_ROW || startColumnIdx + chessboardSize > MAX_COLUMN)
		return;


	map<char, char> getOtherColor{ {'W', 'B'}, {'B', 'W'} };

	for (int testCase = 0; testCase < 2; testCase++)
	{
		int replaceNums = (testCase == 0) ? 0 : 1;
		char preColor = (testCase == 0) ? field[startRowIdx][startColumnIdx] : getOtherColor[field[startRowIdx][startColumnIdx]];

		for (int row = startRowIdx; row < startRowIdx + chessboardSize; row++)
		{
			string compare = field[row];
			int startIdx = (row == startRowIdx) ? startColumnIdx + 1 : startColumnIdx;

			for (int column = startIdx; column < startColumnIdx + chessboardSize; column++)
			{
				if (preColor == compare[column])
				{
					replaceNums++;
					preColor = getOtherColor[compare[column]];
					continue;
				}

				preColor = compare[column];
			}

			preColor = getOtherColor[preColor];
		}

		if (replaceNums < minCount)
			minCount = replaceNums;
	}
}


int main()
{
	cin.tie(NULL);
	ios::sync_with_stdio(false);

	const int chessboardSize = 8;
	int rowNum, columnNum;
	cin >> rowNum >> columnNum;

	vector<string> field;
	for (int i = 0; i < rowNum; i++)
	{
		string row;
		cin >> row;
		field.push_back(row);
	}

	int answer = 2147483647;
	for (int i = 0; i < rowNum; i++)
		for (int j = 0; j < columnNum; j++)
			Search(field, i, j, chessboardSize, answer);

	cout << answer;
	return 0;
}

๋ฐ˜๋ก€๋•Œ๋ฌธ์— ์–ต๊นŒ๋ฅผ ์ข€ ๋งŽ์ด ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค...ใ…Žใ…Ž

 

 

728x90
๋ฐ˜์‘ํ˜•