01
06

 

https://www.acmicpc.net/problem/3085

 

3085๋ฒˆ: ์‚ฌํƒ• ๊ฒŒ์ž„

์˜ˆ์ œ 3์˜ ๊ฒฝ์šฐ 4๋ฒˆ ํ–‰์˜ Y์™€ C๋ฅผ ๋ฐ”๊พธ๋ฉด ์‚ฌํƒ• ๋„ค ๊ฐœ๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

 

import java.io.FileInputStream;
import java.util.Scanner;

class Main{
    public static void main(String[] args) throws Exception{
        System.setIn(new FileInputStream("res/input.txt"));

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        char[][] map = new char[n][n];
        for(int i=0; i<n; i++){
            char[] input = sc.nextLine().toCharArray();
            int idx = 0;
            for(char k: input){
                map[i][idx] = k;
            }
        }
        
        int ans = 0;
        // ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ๊ฐ€ ์ธ์ ‘ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„์•ผ ๋จ
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                // j+1 ์ฒดํฌ
                if(j == n-1){ // ๋งˆ์ง€๋ง‰ ์—ด์€ ๋™์ผ ํ–‰ ๋‹ค์Œ ์›์†Œ ๋น„๊ต x
                    // i+1 ์ฒดํฌ
                    if(i == n-1){ // ๋งˆ์ง€๋ง‰ ํ–‰์€ ๋™์ผ ์—ด ๋‹ค์Œ ์›์†Œ ๋น„๊ต x
                        // ๋งจ ๋งˆ์ง€๋ง‰ ์œ„์น˜์ด๋‹ˆ ๊นŒ ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ• ๊ฒƒ
                    }else{
                        if (map[i][j] != map[i+1][j]) {
                            swap(map, i, j, i+1, j);
                            int len = 1;
                            for(int a=1; a<n; a++){ // ์—ด ๊ณ ์ •
                                if(map[a-1][j] == map[a][j]){
                                    len++;
                                }else{
                                    len=1;
                                }
                                ans = Math.max(ans, len);
                            }
                            ans = Math.max(ans, len);
                            swap(map, i, j, i+1, j);
                        }
                    }
                }else{
                    if(i == n-1){ // ๋งˆ์ง€๋ง‰ ํ–‰์€ ๋™์ผ ์—ด ๋‹ค์Œ ์›์†Œ ๋น„๊ต x
                        if(map[i][j] != map[i][j+1]){
                            swap(map, i, j, i, j+1);
                            // ๋™์ผ ํ–‰ ์ตœ์žฅ๊ธธ์ด ๊ฒ€์ƒ‰
                            int len = 1;
                            for(int a=1; a<n; a++){ // ํ–‰ ๊ณ ์ •
                                if(map[i][a-1] == map[i][a]){
                                    len++;
                                }else{
                                    len=1;
                                }
                                ans = Math.max(ans, len);
                            }
                            ans = Math.max(ans, len);
                            //์›๋ณต
                            swap(map, i, j, i, j+1);
                        }
                    }else{// ์ด ๊ฒฝ์šฐ๊ฐ€ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ
                        if(map[i][j] != map[i][j+1]){
                            swap(map, i, j, i, j+1);
                            // ๋™์ผ ํ–‰ ์ตœ์žฅ๊ธธ์ด ๊ฒ€์ƒ‰
                            int len = 1;
                            for(int a=1; a<n; a++){ // ํ–‰ ๊ณ ์ •
                                if(map[i][a-1] == map[i][a]){
                                    len++;
                                }else{
                                    len=1;
                                }
                                ans = Math.max(ans, len);
                            }
                            ans = Math.max(ans, len);
                            //์›๋ณต
                            swap(map, i, j, i, j+1);
                        }
                        if (map[i][j] != map[i+1][j]) {
                            swap(map, i, j, i+1, j);
                            int len = 1;
                            for(int a=1; a<n; a++){ // ์—ด ๊ณ ์ •
                                if(map[a-1][j] == map[a][j]){
                                    len++;
                                }else{
                                    len=1;
                                }
                                ans = Math.max(ans, len);
                            }
                            ans = Math.max(ans, len);
                            swap(map, i, j, i+1, j);
                        }
                    }
                }
            }
        }

        System.out.println(ans);

        sc.close();
    }

    static void swap(char[][] map, int ai, int aj, int bi, int bj){
        char tmp = map[ai][aj];
        map[ai][aj] = map[bi][bj];
        map[bi][bj] = tmp;
    }
}

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

๊ทธ๋ƒฅ ์ง„ํ–‰ ๋ฐฉํ–ฅ์„ r+1, c+1๋กœ๋งŒ ์ œํ•œํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ–ˆ๋‹ค. ๋ฌธ์ œ ์œ ํ˜• ์ž์ฒด๊ฐ€ ์™„์ „ํƒ์ƒ‰์ด๋‹ˆ ์ด๋ ‡๊ฒŒ ํ•ด๋ดค๋Š”๋ฐ ๋‹ต์ด ์•ˆ๋‚˜์™”๋‹ค.. ๋‹ค์‹œ ํ’€์–ด๋ณด์ž.

 

1/6์ผ ์˜ค๋Š˜ ์•ˆ์— ์‚ฌํƒ•๊ฒŒ์ž„ ์ •๋ณตํ•˜์ž.


์ •๋‹ต์ฝ”๋“œ

import java.io.FileInputStream;
import java.util.Scanner;

class Main{
    public static void swapItem(char[][] map, int ia, int ja, int ib, int jb){
        char tmp = map[ia][ja];
        map[ia][ja] = map[ib][jb];
        map[ib][jb] = tmp;
    }

    public static int findMaxRow(char[][] map, int n){
        int tmpMax = 0;

        for(int i=0; i<n; i++){
            int len = 1;
            for(int j=1; j<n; j++){
                if(map[i][j-1] == map[i][j]){
                    len++;
                }else{
                    tmpMax = Math.max(tmpMax, len);
                    len = 1;
                }
            }
            tmpMax = Math.max(tmpMax, len);
        }
        return tmpMax;
    }

    public static int findMaxCol(char[][] map, int n){
        int tmpMax = 0;

        for(int i=0; i<n; i++){
            int len = 1;
            for(int j=1; j<n; j++){
                if(map[j-1][i] == map[j][i]){
                    len++;
                }else{
                    tmpMax = Math.max(tmpMax, len);
                    len = 1;
                }
            }
            tmpMax = Math.max(tmpMax, len);
        }
        return tmpMax;
    }

    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        char[][] map = new char[n][n];
        for(int i=0; i<n; i++){
            char[] input = sc.next().toCharArray();
            int idx = 0;
            for(char k: input){
                map[i][idx++] = k;
            }
        }

        int ans = 0;

        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                if (j+1 < n && map[i][j] != map[i][j+1]){ // ์•ž์œผ๋กœ ๊ตํ™˜
                    swapItem(map, i,j, i, j+1);
                    ans = Math.max(ans, Math.max(findMaxRow(map, n), findMaxCol(map,n)));
                    swapItem(map, i,j, i, j+1);
                }
                if (i+1 < n && map[i][j] != map[i+1][j]){ // ์•„๋ž˜๋กœ ๊ตํ™˜
                    swapItem(map, i,j, i+1, j);
                    ans = Math.max(ans, Math.max(findMaxRow(map, n), findMaxCol(map,n)));
                    swapItem(map, i,j, i+1, j);
                }
            }
        }

        System.out.println(ans);

        sc.close();
    }
}

 

์ •๋‹ต์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด์„œ ํ•จ์ •์— ๋น ์กŒ๋˜๊ฑด ans๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

๋” ํฐ ๊ฐ’์„ ๊ณ ๋ฅผ ๋•Œ ans์˜ ์ด์ „ ๊ฐ’๋„ ์‹ ๊ฒฝ์“ฐ์ง€์•Š์œผ๋ฉด ํ–‰๋ฐฉํ–ฅ ๊ตํ™˜ํ•  ๋•Œ ์—ด๋ฐฉํ–ฅ ๊ตํ™˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฌด์‹œ๋ผ์„œ ๋‹ต์ด ์ œ๋Œ€๋กœ ์•ˆ๋‚˜์˜จ๋‹ค. ์™„์ „ ํƒ์ƒ‰์ด์ง€๋งŒ ๋ฐฐ์—ด ์ปจํŠธ๋กค์— ๊ฐ€๊นŒ์› ๋˜ ๋ฌธ์ œ ๊ฐ™๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT