백준 c++

백준 3085 c++ 사탕 게임

현구구 2024. 1. 28. 18:38

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int maxCnt = 0;
vector<vector<char>> arr;
int n;

void checkMax()
{
	//가로 체크
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1; j++)
		{
			char tmp = arr[i][j];
			int localMax = 1;
			while (tmp == arr[i][j + 1]) // 다음거랑 같다면
			{
				if (j + 1 == n - 1)
				{
					localMax++;
					break;
				}
				localMax++;
				j++;
			}
			if (maxCnt < localMax)
			{
				maxCnt = localMax;
			}
		}
	}
	//세로 체크
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1; j++)
		{
			char tmp = arr[j][i];
			int localMax = 1;
			while (tmp == arr[j+1][i]) // 다음거랑 같다면
			{
				if (j + 1 == n - 1)
				{
					localMax++;
					break;
				}
				localMax++;
				j++;
			}
			if (maxCnt < localMax)
			{
				maxCnt = localMax;
			}
		}
	}
}

void changeRow()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1; j++)
		{
			char tmp = arr[i][j]; // 1회 교환
			arr[i][j] = arr[i][j + 1];
			arr[i][j + 1] = tmp;
			checkMax();
			arr[i][j + 1] = arr[i][j]; //원상복구
			arr[i][j] = tmp;
		}
	}
}

void changeCol()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1; j++)
		{
			char tmp = arr[j][i]; // 1회 교환
			arr[j][i] = arr[j+1][i];
			arr[j+1][i] = tmp;
			checkMax();
			arr[j+1][i] = arr[j][i]; //원상복구
			arr[j][i] = tmp;
		}
	}
}

int main()
{
	cin >> n;
	arr = vector<vector<char>>(n,vector<char>(n,0));
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> arr[i][j];
		}
	}
	changeRow();
	changeCol();
	cout << maxCnt;
}

 

한 번 교체 > 가장 긴 연속 색 체크 > 다시 교체하여 원상복구

'백준 c++' 카테고리의 다른 글

백준 1476 c++ 날짜 계산  (0) 2024.01.29
백준 2309 일곱 난쟁이 c++  (0) 2024.01.27
백준 6588 c++ 골드바흐의 추측  (0) 2024.01.27
백준 1929 c++ 소수 구하기  (0) 2024.01.26
백준 1978 c++ 소수 찾기  (0) 2024.01.26