결론: 행 또는 열을 기준으로 사탕을 하나씩 교환해보며 가장 긴 행이나 열의 사탕 개수를 구하라
쉽게 말하자면 애니팡
swap
함수를 통해 모든 칸을 다 교환해보며 최댓값을 찾는다.📌 별다른 방법이 없다! 완전 탐색으로 간다!
#include <bits/stdc++.h>
using namespace std;
int n;
int maxNum = 0;
char board[51][51];
void check(){
// 최장 행 길이 구하기
for(int i = 0; i < n; i++){
int cnt = 1;
for(int j = 0; j < n; j++){
if(board[i][j] == board[i][j + 1]) cnt++;
else{
if(maxNum < cnt) maxNum = cnt;
cnt = 1;
}
}
}
// 최장 열 길이 구하기
for(int j = 0; j < n; j++){
int cnt = 1;
for(int i = 0; i < n; i++){
if(board[i][j] == board[i + 1][j]) cnt++;
else{
if(maxNum < cnt) maxNum = cnt;
cnt = 1;
}
}
}
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cin >> board[i][j];
}
}
// 열 바꾸기 == 최장 열 탐색
for(int i = 0; i < n; i++){
for(int j = 0; j < n - 1; j++){
swap(board[i][j], board[i][j + 1]);
check();
swap(board[i][j], board[i][j + 1]);
}
}
// 행 바꾸기 == 최장 행 탐색
for(int j = 0; j < n; j++){
for(int i = 0; i < n - 1; i++){
swap(board[i][j], board[i + 1][j]);
check();
swap(board[i][j], board[i + 1][j]);
}
}
cout << maxNum;
return 0;
}