알고리즘/SWEA

[SWEA] 1216. [S/W 문제해결 기본] 3일차 - 회문2

Ellie67 2022. 11. 10. 15:08

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

SWEA 1216번

 

 

이렇게 회문 구하는 문제

가로와 세로 나눠서 코드 작성

[ 접근 방식 ] 을 문자 배열을 board[]라고 하고, 위 행렬 중 한 줄을 예시로 들어서 설명해보면

k를 증가시키면서 board[j] == board[k] 인걸 찾고, 

같은 걸 찾았으면 0부터 k-j 전만큼 j에 더하고, k에서 빼면서 문자가 같은지 확인한다. 

같으면 flag = true, 다르면 flag = false

k-j전까지 더하고 뺐는데 flag = true라면 k-j+1만큼 길이가 회문 길이이다.

 

 

import java.util.Scanner;

public class P1216 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = 10;
        for(int t=1; t<=T; t++){
            int tc = sc.nextInt();
            char[][] a = new char[100][100];
            for(int i=0; i<100; i++){
                String str = sc.next();
                char[] ch = str.toCharArray();
                for(int j=0; j<100; j++){
                    a[i][j] = ch[j];
                }
            }
            int max=Integer.MIN_VALUE;

            // 가로
            for(int i=0; i<100; i++){
                for(int j=0; j<100; j++){
                    for(int k=j; k<100; k++){
                        if(a[i][j]==a[i][k]){
                            boolean flag = true;
                            for(int g=0; g<k-j; g++){
                                if(a[i][j+g]!=a[i][k-g]){
                                    flag = false;
                                }
                            }
                            if(flag) {
                                max = Math.max(max, k-j+1);
                            }
                        }
                    }
                }
            }

            // 세로
            for(int i=0; i<100; i++){
                for(int j=0; j<100; j++){
                    for(int k=j; k<100; k++){
                        if(a[j][i]==a[k][i]){
                            boolean flag = true;
                            for(int g=0; g<k-j; g++){
                                if(a[j+g][i]!=a[k-g][i]){
                                    flag = false;
                                }
                            }
                            if(flag) {
                                max = Math.max(max, k-j+1);
                            }
                        }
                    }
                }
            }
            System.out.println("#"+tc+" "+max);
        }
    }
}