반응형
문제 : https://www.acmicpc.net/problem/3085
풀이 :
브루트 포스 문제이다.
결국 모든 경우의 수를 다 체크해야된다는건데....
for문의 집합체인것 같다..
경우의수를 모두 체크해주면된다.
1). 오른쪽 왼쪽을 바꿨을때 => 가로
2). 위아래를 바꿨을때 => 세로
대각선은 제외하고 두가지만 체크해서 먹을 수 있는 갯수를 확인한다.
static int result;
static char[][] arr;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
arr = new char[n][n];
//일단 arr에 다 넣어주자
for (int i = 0; i < n; i++) {
arr[i] = br.readLine().toCharArray();
}
//다넣었으면 한칸씩 오른쪽 위아래 교환해보자.
for (int i = 0; i < n; i++) {
for (int j = 0; j < n-1; j++) {//0,1 => 왼쪽 오른쪽을 바꾸는건 같으니까 마지막은 그대로
char tmp = arr[i][j];
//오른쪽 왼쪽 교환 후 확인
arr[i][j] = arr[i][j + 1];
arr[i][j + 1] = tmp;
check();
tmp = arr[i][j + 1];
arr[i][j + 1] = arr[i][j];
arr[i][j] = tmp;
tmp = arr[j][i];
arr[j][i] = arr[j + 1][i];
arr[j + 1][i] = tmp;
check();
tmp = arr[j + 1][i];
arr[j + 1][i] = arr[j][i];
arr[j][i] = tmp;
}
}
System.out.println(result);
}
static void check() {
//양옆 체크
for (int i = 0; i < arr.length; i++) {
int check= 1;//한개는 무조건 먹으니까 0이 아님
for (int j = 1; j < arr.length; j++) {
if(arr[i][j] == arr[i][j-1]) {
++check; //+1 해준다.
}else {
result = result < check ? check : result;
check =1;
}
}
result = result < check ? check : result;
}
//위아래 체크
for (int i = 0; i < arr.length; i++) {
int check = 1;
for (int j = 1; j < arr.length; j++) {
if(arr[j][i] == arr[j-1][i]) {
++check;
}else {
result = result < check ? check : result;
check =1;
}
}
result = result < check ? check : result;
}
}
반응형
'Java > Algorithm' 카테고리의 다른 글
[Java-Algorithm] 백준 15650 N과 M (2) 풀이 (0) | 2021.08.04 |
---|---|
[Java-Algorithm] 백준 15649 N과 M(1) 풀이 (0) | 2021.08.04 |
[Java-Algorithm] 백준 17298 오큰수 풀이 (0) | 2021.07.21 |
[Java-Alogrithm] 백준 17413 단어 뒤집기 2 풀이 (0) | 2021.07.15 |
[Java-Algorithm] 백준1406 에디터 풀이 (0) | 2021.07.15 |