[SWEA] #1216 회문2

KwonSC·2021년 11월 7일
0

SWEA - Java

목록 보기
9/26
post-thumbnail

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14Rq5aABUCFAYi&categoryId=AV14Rq5aABUCFAYi&categoryType=CODE


Code

import java.util.Scanner;

class Solution {
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        for (int testCase = 1; testCase <= 10; testCase++) {
            int n = sc.nextInt();
            char arr[][] = new char[100][100];
            for (int i = 0; i < 100; i++) {
                String temp = sc.next();
                arr[i] = temp.toCharArray();
            }
            int result = 0;
            for (int x = 100; x > 0; x--) {
                boolean flag = false;
                for (int i = 0; i < 100; i++) {
                    for (int j = 0; j <= 100 - x; j++) {
                        boolean row = true;
                        for (int k = 0; k < x / 2; k++) {
                            if (arr[i][j + k] != arr[i][j + x - 1 - k]) {
                                row = false;
                                break;
                            }
                        }
                        if (row) {
                            flag = true;
                            break;
                        }
                    }
                    if (flag) {
                        break;
                    }
                }
                if (!flag) {
                    for (int i = 0; i <= 100 - x; i++) {
                        for (int j = 0; j < 100; j++) {
                            boolean col = true;
                            for (int k = 0; k < x / 2; k++) {
                                if (arr[i + k][j] != arr[i + x - 1 - k][j]) {
                                    col = false;
                                    break;
                                }
                            }
                            if (col) {
                                flag = true;
                                break;
                            }
                        }
                        if (flag) {
                            break;
                        }
                    }
                }
                if (flag) {
                    result = x;
                    break;
                }
            }
            System.out.printf("#%d %d\n", n, result);
        }
    }
}

Solution

회문찾는 로직은 회문1과 같다.
찾을수 있는 회문 길이중 최대값을 찾아야하므로 100부터 1까지 k 회문길이를 역순으로 for문 돌린다음 회문이 발견되면 그 값을 출력
회문이 발견되면 for문을 빠져나오기 위해 복잡하게 break문을 작성하였다.
코드의 가독성이 좋지 않아 좀더 보완해야 할듯하다.

0개의 댓글