전략: brute force
N×N크기의테이블에사탕이있다.(N≤50)
인접한두칸을고르고,사탕을교환한다. (N의 제곱)
그다음,같은색으로이루어져있는가장긴연속부분행또는열을고르는문제 (N의 네제곱)
더 좋은 알고리즘: 자기가 건든 열과 행만 바꾼다.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int check(vector<string> colors){
int answer = 1;
int size = colors.size();
for(int i = 0; i<size; i++){
int count = 1;
for(int j = 1; j<size ; j++){
if (colors[i][j] == colors[i][j-1]) {
count += 1;
} else {
count = 1;
}
if (answer < count) answer = count;
}
count = 1;
for(int j = 1; j<size ; j++){
if (colors[j][i] == colors[j-1][i]) {
count += 1;
} else {
count = 1;
}
if (answer < count) answer = count;
}
}
return answer;
}
int main() {
int n;
cin >> n;
vector<string> colors(n);
for (int i=0; i<n; i++) {
cin >> colors[i];
}
int answer = 0;
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
if(j+1<n){
swap(colors[i][j], colors[i][j+1]);
int temp = check(colors);
if(temp>answer) answer = temp;
swap(colors[i][j],colors[i][j+1]);
}
if(i+1<n){
swap(colors[i][j], colors[i+1][j]);
int temp = check(colors);
if(temp>answer) answer = temp;
swap(colors[i][j],colors[i+1][j]);
}
}
}
cout << answer << endl;
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 14500번 - 테트로미노 (0) | 2020.08.17 |
---|---|
백준 1476번 : 날짜 계산 (0) | 2020.08.15 |
백준2309번 - 일곱 난쟁이 (0) | 2020.08.14 |
백준 1316번 - 그룹단어 체커 (0) | 2020.07.30 |
백준 7568번 - 덩치 (0) | 2020.07.30 |