1. ๋ฌธ์ ์ค๋ช
(์ฌํ๊ฒ์ ๋งํฌ)[https://www.acmicpc.net/problem/3085]
- ์บ๋ ํฌ๋ฌ์ฌ ์ฒ๋ผ, ์๋ก ๋ค๋ฅธ ์ข ๋ฅ์ ์บ๋๊ฐ ๋ณด์ด๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค.
- ๊ทธ ํ, ํ ํ, ํน์ ํ ์ด์์ ๊ฐ์ ์ข ๋ฅ์ ์บ๋๋ผ๋ฆฌ ๋์ด๋์ด ์์ผ๋ฉด ๊ทธ๊ฑด ํฐ์ ธ์ ์ฌ๋ผ์ง.
- ์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์์ ํ ๋ฒ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟจ์ ๋ ํฐ์ง ์ ์๋ ์ต๋ํ์ ์บ๋์ ๊ฐ์๋ฅผ ๊ตฌํ์์ค
2. ํธ๋ ์๋ฆฌ
- ์๋ก ๋ค๋ฅธ ์ข ๋ฅ์ ์บ๋๋ฅผ ๋ง๋๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค.
- ๋ชจ๋ ํ์ ๊ฒ์ฌํ๋ฉฐ, ์ผ๋ จ์ ์ฐ์์ฑ์ ๊ฐ์ง ์บ๋์ ๊ฐ์๋ฅผ ์ผ๋ค. -> ์ต๊ณ ๊ธธ์ด ๊ฐฑ์
- ๋ชจ๋ ์ด์ ๊ฒ์ฌํ๋ฉฐ, ์ผ๋ จ์ ์ฐ์์ฑ์ ๊ฐ์ง ์บ๋์ ๊ฐ์๋ฅผ ์ผ๋ค. -> ์ต๊ณ ๊ธธ์ด ๊ฐฑ์
- ์ต๊ณ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* ๊ฐ์ํ๋ ์ - ์กฐํฉ
* (1) ์กฐํฉ์ผ๋ก ๊ตฌํด์ผํ๋ ๊ฐ์ ์๋ฆฟ์ ์ ์
* (2) ํด๋น ์๋ฆฟ์์์ ์์ ์ซ์ ์ ์
* (3) ์์ ์ซ์์์ ์ญ์์ผ๋ก ๊ฐ ๊ตฌํ๊ธฐ
* */
public class Main {
static int N;
static char [][] arr;
static int [] idx = {1,0,-1,0};
static int [] idy = {0,1,0,-1};
static int maxStreak = 0;
public static void main(String[] args) throws IOException {
// 1. ๊ฐ ์
๋ ฅ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new char[N][N];
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
arr[i][j] = s.charAt(j);
}
}
/*
* 2) ๊ณ์ฐ
* 2-1) ์ธ์ ํ ๋
์์ด ๋ค๋ฅด๋ฉด ์๋ก ์์น ๊ตํ
* 2-2) ํ ๊ฒ์ฌ -> Streak Max ๊ฐ ์ก๊ณ , ํ ํ ๊ฒ์ฌ
* 2-3) ์ด ๊ฒ์ฌ -> Streak Max ๊ฐ ์ก๊ณ , ํ ์ด ๊ฒ์ฌ
* */
exchange();
System.out.println(maxStreak);
}
public static void exchange() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
char now = arr[i][j];
for (int k = 0; k < 4; k++) {
int nx = i + idx[k];
int ny = j + idy[k];
if(nx < 0 || ny < 0 || nx >= N || ny >= N) continue;
if(now != arr[nx][ny]){
// ์์น ๋ฐ๊พธ๊ธฐ -> C++ ์๊ฐ๋จ...
char temp = arr[nx][ny];
arr[nx][ny] = arr[i][j];
arr[i][j] = temp;
checkRow();
checkCol();
// ์์์น ๋๋ฆฌ๊ธฐ
temp = arr[nx][ny];
arr[nx][ny] = arr[i][j];
arr[i][j] = temp;
}
}
}
}
}
public static void checkRow() {
for (int i = 0; i < N; i++) {
char prev = '0';
int small_streak = 0;
for (int j = 0; j < N; j++) {
if(j == 0){
prev = arr[i][j];
small_streak++;
}else {
if(arr[i][j] == prev){
small_streak++;
prev = arr[i][j];
}else {
small_streak = 1;
prev = arr[i][j];
}
maxStreak = Math.max(small_streak, maxStreak);
}
}
}
}
public static void checkCol() {
for (int i = 0; i < N; i++) {
char prev = '0';
int small_streak = 0;
for (int j = 0; j < N; j++) {
if( j == 0){
prev = arr[j][i];
small_streak++;
}else {
if(arr[j][i] == prev){
small_streak++;
prev = arr[j][i];
}else {
small_streak = 1;
prev = arr[j][i];
}
maxStreak = Math.max(small_streak, maxStreak);
}
}
}
}
}
0