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 |