(JAVA) ๋ฐฑ์ค€ 3085๋ฒˆ : ์‚ฌํƒ• ๊ฒŒ์ž„

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

 

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

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

www.acmicpc.net

์ฒซ๋ฒˆ์งธ ์‹œ๋„ (์‹คํŒจ)

- n์˜ ํฌ๊ธฐ๊ฐ€ ๊ทธ๋ฆฌ ํฌ์ง€ ์•Š๊ธฐ์— ๋‹จ์ˆœํ•˜๊ฒŒ ๊ตฌํ•ด๋ณด์•˜๋‹ค.

- ๊ฐ€๋กœ๋กœ ๊ตํ™˜ํ•  ๋•Œ, ์„ธ๋กœ๋กœ ๊ตํ™˜ํ•  ๋•Œ๋กœ ํฌ๊ฒŒ ๋‚˜๋ˆ„๊ณ  ์›๋ž˜์˜ ๊ฐ’๊ณผ ๋ฐ”๊พธ๋Š” ๋Œ€์ƒ์„ div๋กœ 

- ์ค‘๋ณต์€ ๋งŽ์ง€๋งŒ ๋‚˜์ค‘์— ์—†์•จ ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.io.InputStreamReader;
import java.io.BufferedReader;
 
public class Main {
    static char[][] G;
    static int n;
    static int[][] div = {{0,0},{-1,0},{1,0}};//lDiv์‹œ ij ๋ฐ”๊พธ๊ธฐ
    static boolean Valid(int x, int y) {
        if (x<0||x>=n) return false;
        if (y<0||y>=n) return false;
        return true;
    }
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        G = new char[n][n];
        for (int i=0;i<n;i++) {
            String s = br.readLine().strip();
            for (int j=0;j<n;j++
                G[i][j] = s.charAt(j);
        }
        int mx=-1;
        for (int i=0;i<n;i++) { //w
            
            for (int j=0;j<n;j++) {
                
                for (int k=0;k<3;k++) {
                    int x = i+div[k][0],y = j+div[k][1];
                    if (Valid(x,y)==falsecontinue;
                    char pp ='0';
                    int a=0;
                    for (int p=0;p<n;p++) {
                        char t = G[i][p];
                        if (j==p) t = G[x][y];
                        if (t!=pp) {
                            mx = Math.max(mx, a);
                            pp=t; a=1;
                        }
                        else a+=1;
                    }
                    mx = Math.max(mx, a);
                }
            }
        }
        
        for (int j=0;j<n;j++) { //l
            
            for (int i=0;i<n;i++) {
                
                for (int k=0;k<3;k++) {
                    int x = i+div[k][1],y = j+div[k][0];
                    if (Valid(x,y)==falsecontinue;
                    char pp ='0';
                    int a=0;
                    for (int p=0;p<n;p++) {
                        char t = G[p][j];
                        if (i==p) t = G[x][y];
                        if (t!=pp) {
                            mx = Math.max(mx, a);
                            pp=t; a=1;
                        }
                        else a+=1;
                    }
                    mx = Math.max(mx, a);
                }
            }
        }
        System.out.println(mx);
    }
 
}
 
cs

 - ์ฒซ ์‹œ๋„์—์„œ๋Š” 2์Œ์˜ ์‚ฌํƒ•์ด ๋ฐ”๋€” ๋•Œ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด j์™€ j+div[x][1]์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌํƒ•์„ ๋ฐ”๊ฟจ์„๋•Œ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ–‰ ๋˜๋Š” ์—ด์„ ๊ณ ๋ คํ•ด์•ผํ•˜๊ธฐ์— ๋‘๋ฒˆ์งธ ์‹œ๋„์—์„œ๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์ณ๋ณด์•˜๋‹ค.

 

๋‘๋ฒˆ์งธ ์‹œ๋„ (์„ฑ๊ณต)

- ์ฒซ๋ฒˆ์งธ ์‹œ๋„์—์„œ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ–ˆ๋˜ '๋ฐ”๋€Œ๋Š” ์‚ฌํƒ•์Œ์ด ๋ชจ๋‘ ํฌํ•จ๋œ ํ–‰ ๋˜๋Š” ์—ด'์„ ๊ณ ๋ คํ•˜์—ฌ ๋ณด์•˜๋‹ค. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import java.io.InputStreamReader;
import java.io.BufferedReader;
 
public class Main {
    static char[][] G;
    static int n;
    static int[][] div = {{0,0},{-1,0},{1,0}};
    static boolean Valid(int x, int y) {
        if (x<0||x>=n) return false;
        if (y<0||y>=n) return false;
        return true;
    }
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        G = new char[n][n];
        for (int i=0;i<n;i++) {
            String s = br.readLine().strip();
            for (int j=0;j<n;j++
                G[i][j] = s.charAt(j);
        }
        int mx=-1;
        for (int i=0;i<n;i++) { 
            
            for (int j=0;j<n;j++) {
                
                for (int k=0;k<3;k++) {
                    int x = i+div[k][0],y = j+div[k][1];
                    if (Valid(x,y)==falsecontinue;
                    char pp ='0';
                    int a=0;
                    for (int p=0;p<n;p++) {
                        char t = G[i][p];
                        if (j==p) t = G[x][y];
                        if (t!=pp) {
                            mx = Math.max(mx, a);
                            pp=t; a=1;
                        }
                        else a+=1;
                    }
                    mx = Math.max(mx, a);
                    pp ='0';
                    a=0;
                    for (int p=0;p<n;p++) {
                        char t = G[p][j];
                        if (p==x) t = G[i][j];
                        else if (p==i) t = G[x][y]; 
                        if (t!=pp) {
                            mx = Math.max(mx, a);
                            pp=t; a=1;
                        }
                        else a+=1;
                    }
                    mx = Math.max(mx, a);
                    
                }
            }
        }
        
        for (int j=0;j<n;j++) { 
            
            for (int i=0;i<n;i++) {
                
                for (int k=0;k<3;k++) {
                    int x = i+div[k][1],y = j+div[k][0];
                    if (Valid(x,y)==falsecontinue;
                    char pp ='0';
                    int a=0;
                    for (int p=0;p<n;p++) {
                        char t = G[p][j];
                        if (i==p) t = G[x][y];
                        if (t!=pp) {
                            mx = Math.max(mx, a);
                            pp=t; a=1;
                        }
                        else a+=1;
                    }
                    mx = Math.max(mx, a);
                    pp ='0';
                    a=0;
                    for (int p=0;p<n;p++) {
                        char t = G[i][p];
                        if (p==y) t = G[i][j];
                        else if (p==j) t = G[i][y]; 
                        if (t!=pp) {
                            mx = Math.max(mx, a);
                            pp=t; a=1;
                        }
                        else a+=1;
                    }
                    mx = Math.max(mx, a);
                }
            }
        }
        System.out.println(mx);
    }
 
}
 
cs

 

- ์ด ๊ฒฝ์šฐ ์„ฑ๊ณตํ–ˆ๋‹ค. 

 

 

ํšจ์œจํ™”๋ฅผ ์œ„ํ•œ ์„ธ๋ถ€์‚ฌํ•ญ

- int[][] div์˜ ๊ฒฝ์šฐ [x][0]์€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ ์—†์ด 0์œผ๋กœ ๋˜์–ด์žˆ๊ธฐ์— ์ผ์ฐจ์› ๋ฐฐ์—ด๋กœ ์ˆ˜์ •ํ•˜๋Š”๊ฒƒ์ด ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

- ๋ฐ”๋€Œ๋Š” 2์Œ์˜ ์‚ฌํƒ•์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ j์™€ j+1,๊ทธ๋ฆฌ๊ณ  i์— ๋Œ€ํ•ด ๋ณ€ํ•œ ์ดํ›„์˜ ์ตœ๋Œ€์—ฐ์† ๊ธธ์ด๋ฅผ ์ฐพ๋Š”๋‹ค. ํšจ์œจํ™”๋ฅผ ์œ„ํ•ด  ๋ฐ”๋€Œ๋Š” 2์Œ์˜ ๊ฐ€์ง“์ˆ˜๋งŒ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ์˜ 3๊ฐ€์ง€ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๊ธธ์ด๋ฅผ ์ฐพ๋Š”๋‹ค. (์œ„์˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ๋Š” ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค.) 

 

ํ›„๊ธฐ

- ์‹ค๋ฒ„ 2์˜ ๋‚œ์ด๋„๋กœ ์‰ฌ์šดํŽธ์ด์ง€๋งŒ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ๋งŽ์•„ ์ƒ๊ฐ๋ณด๋‹ค ์‹œ๊ฐ„์„ ์“ด ๋ฌธ์ œ์˜€๋‹ค. 

- ์–ด๋– ํ•œ ์ž‘์—…์ด ์ผ์–ด๋‚ฌ์„๋•Œ ์–ด๋А ๋ฒ”์œ„๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์ž..