[SWEA] 1216. 회문2

KwangYong·2022년 5월 15일
0
 import java.util.Scanner;
    class Solution
    {
        static int max;
        public static void main(String args[]) throws Exception
        {
            Solution Sol= new Solution();
            Scanner sc = new Scanner(System.in);
            int T = 10;
//            T=sc.nextInt();
            for(int test_case = 1; test_case <= T; test_case++)
            {
                sc.nextInt();
                char[][] board = new char[100][100];
                max = 0;
                for (int i = 0; i < 100; i++) {
                    board[i]= sc.next().toCharArray();
                }
                //스트링의 시작과 끝을 정해준다.
                //모든 시작에 대해서 + 모든 끝에 대해서 탐색
                for (int s = 0; s < 100; s++) {
                    for (int e = 99; e > s + max - 1; e--) { //길이 max보다 같거나 작은 경우는 탐색할 필요없음
                        int len = e - s + 1;
                        int half = len / 2; //회문을 검사할 때, 동시에 양쪽을 확인하는 것이기떄문에 절반만 확인하면됨.
                        //각 s부터 e까지의 스트링에 대해서 회문검사
                        for (int i = 0; i < 100; i++) { //모든 행을 탐색해야함
                            boolean flag = true;
                            for (int j = 0; j < half; j++) { //열에 대해서 half-1 까지만 탐색하면됨.
                                if(board[i][s+j] != board[i][e-j]) {
                                     flag = false;
                                     break; //더 이상 해당 i행의 s~e 스트링에 대해서 회문 검사할 필요 없음
                                }
                            }
                            if(!flag) continue;
                            if(len > max) max = len; //flag 조건 통과했다면 max 갱신
                        }

                        //여기부턴 세로 s~e 스트링에 대해서 회문 검사
                        for (int i = 0; i < 100; i++) { //모든 열에 대해서 탐색
                            boolean flag = true;
                            for (int j = 0; j < half; j++) {//각 열의 행을 half까지 확인하면서 회문 검사
                                if(board[s+j][i] != board[e-j][i]) {
                                    flag = false;
                                    break;
                                }
                            }
                            if(!flag) continue;
                            if(len > max) max = len;
                        }
                    }
                }
                System.out.println("#" +test_case +  " " + max);


            }
        }
    }

출처
https://zetawiki.com/wiki/SWEA_1216_(S/W_%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0_%EA%B8%B0%EB%B3%B8)_3%EC%9D%BC%EC%B0%A8_-_%ED%9A%8C%EB%AC%B82

profile
바른 자세로 코딩합니다 👦🏻💻

0개의 댓글