๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 3085๋ฒ ์ฌํ ๊ฒ์ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ฐ๋ฆฌ๊ฐ ๋จผ์ ํด์ผํ ์ผ์ ๋ฌด์์ผ๊น?
๋ฐ๋ก ๊ฒฝ์ฐ์ ์์ ๋ฐ๋ฅธ ์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ์ด๋ค.
์ด ์๊ฐ๋ณต์ก๋๊ฐ ์ด๋ป๊ฒ ๋์ค๊ณ ํต๊ณผ๋ฅผ ํ๋ ๋ง๋์ ๋ฐ๋ผ์ ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ํญ์ด ๋ค์ํด์ง๋ค.
์ด๋ฒ ๋ฌธ์ ์์๋ 2๊ฐ์ ์กฐ๊ฑด์ ์๊ฐํด์ ๋ณด๋ฉด ๋๋ค.
- ์ธ์ ํ ์นธ์ ๋ ์์๋ฅผ ๊ตํํ๋ค.
- ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ ํ,์ด์ ๊ณ ๋ฅธ ๋ค์ ๋จน๋๋ค.
์ธ์ ํ ์นธ์ ๋ ์์๋ฅผ ๊ตํํ๋ค.
n x n
ํ๋ ฌ์์ ๋ชจ๋ ์์๊ฐ ์ธ์ ํ ์นธ์ ๊ณ ๋ฅผ ๊ฒฝ์ฐ์ ์๋ ์ผ๋ง๋ ๋ ๊น?
์๋ง 4 * n^2
์ด ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์๊ฐ์ ํด๋ณด๋ฉด 2 * n^2
์ผ๋ก ์ค์ผ ์ ์๋ค.
์๋ํ๋ฉด ์์์ ํ ์นธ์์๋ ๊ทธ ์ ์นธ์์ ๊ตํ์ ํ๋ ๊ณผ๊ฑฐ๊ฐ ์๊ธฐ ๋๋ฌธ์
- ์ด์ ์ ์ผ์ชฝ์์ ๊ตํ๋ ๊ฒฝ์ฐ
- ์ด์ ์ ์์์ ๊ตํ๋ ๊ฒฝ์ฐ
๋ฅผ ์ ์ธํ๋ฉด 2 * n^2
์ด ๋ ๊ฒ์ด๋ค.
๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ ํ,์ด์ ๊ณ ๋ฅธ ๋ค์ ๋จน๋๋ค.
๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ ํ, ์ด์ ์ ํํ๋ ๊ฒฝ์ฐ๋ ํ ์์๊ฐ ๊ตํ๋ ํ ํด๋น ์์์ ํ๊ณผ ์ด์ ๊ฒ์ฌํ๋ ๋ก์ง์ผ๋ก ๋ํ 2 * n^2
์ด ์์๋๋ค.
๊ทธ๋ผ ์ด ๋์ ๋ชจ๋ ํฉํ์ ๋, 4 * n^2
์ด๋ฏ๋ก ์ฐ๋ฆฌ์ N์ด ์ต์
์ ๊ฒฝ์ฐ 50์ด๋ผ๋ฉด ์ด 2500^2
๋ฒ ์ํํ๊ฒ ๋๋ค.
์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์จ์ผํ ์ง ๋์๋ค.
n์ ๋ํด ๋ชจ๋ ๊ฒฝ์ฐ๊ฐ ์ถฉ๋ถํ ์์ ๊ด๊ณ๋ก ์ฐ๋ฆฌ๋ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
์ค๋ต ํ๋ณด
์ ๋ต ์ฝ๋
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
char[][] board = new char[n][n];
int answer = 0;
int[] dx = {0, 1};
int[] dy = {1, 0};
for (int i = 0; i < n; i++) {
char[] line = br.readLine().toCharArray();
for (int j = 0; j < n; j++) {
board[i][j] = line[j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(j + 1 < n){
swap(board, j, j + 1, i, i);
answer = Math.max(answer, countCandy(board));
swap(board, j, j + 1, i, i);
}
if(i + 1 < n) {
swap(board, j, j, i, i + 1);
answer = Math.max(answer, countCandy(board));
swap(board, j, j, i, i + 1);
}
}
}
bw.write(String.valueOf(answer));
bw.flush();
bw.close();
}
private static int countCandy(char[][] arr) {
int count = 1;
for (int i = 0; i < arr.length; i++) {
int temp = 1;
for (int j = 1; j < arr.length; j++) {
if(arr[i][j] == arr[i][j-1]) {
temp++;
}
else temp = 1;
count = Math.max(count, temp);
}
}
for (int i = 0; i < arr.length; i++) {
int temp = 1;
for (int j = 1; j < arr.length; j++) {
if(arr[j][i] == arr[j-1][i]) {
temp++;
}
else temp = 1;
count = Math.max(count, temp);
}
}
return count;
}
private static void swap(char[][] arr, int x1, int x2, int y1, int y2) {
char temp = arr[y1][x1];
arr[y1][x1] = arr[y2][x2];
arr[y2][x2] = temp;
}
}
๋๊ธ