코딩테스트

SWEA 1216 : 회문2

joonwoong 2024. 3. 5. 20:56

문제.

 

풀이.

회문1과 같은 알고리즘을 이용하지만 회문의 길이를 정해주지 않았으므로 100*100 배열이니까 회문의 길이를 100부터 줄여가면서 확인한다. 런타임 에러 신경써야하고 범위 잘 정해줘야한다.

 

코드.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class App {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        char[][] puzzle = new char[100][100]; // 문자열들을 받아서 넣을 8*8 배열

        int count = 0; // 회문이 나올때 카운트할 변수
        boolean flag = false; // 회문인지 아닌지 확인할 플래그

        for(int TC=1;TC<=10;TC++){
            count = 0;
            // 찾을 회문 길이 입력받기
            int N = Integer.parseInt(br.readLine());
            //입력받기
            for(int i=0;i<100;i++){
                String str = br.readLine();
                for(int j=0;j<100;j++){
                    puzzle[i][j] = str.charAt(j);
                }
            }
            // 가로 확인하기
            for(int len=1;len<=100;len++){
                for(int i=0;i<100;i++){
                    for(int j=0; j<100-len+1;j++){
                        flag = true;
                        for(int k=0;k<len/2;k++){
                            if(puzzle[i][j+k]!=puzzle[i][j-k+len-1]){
                                flag = false;
                            }
                        }
                        if(flag){
                            count = Math.max(count, len);
                        }
                    }
                }
            }
            // 세로 확인하기
            for(int len=1;len<=100;len++){
                for(int i=0;i<100-len+1;i++){
                    for(int j=0; j<100;j++){
                        flag = true;
                        for(int k=0;k<len/2;k++){
                            if(puzzle[i+k][j]!=puzzle[i-k+len-1][j]){
                                flag = false;
                            }
                        }
                        if(flag){
                            count = Math.max(count, len);
                        }
                    }
                }
            }
            System.out.printf("#%d %d\n", TC, count);
        }  
    }
}

 

결과.

 

소감.

회문1을 풀고 푸는 것이라 딱히 어려움은 없었으나 범위를 줄여가면서 해야해서 조금 헷갈리는 경향이 있었다.

'코딩테스트' 카테고리의 다른 글

SWEA 1218 : 괄호 짝짓기  (0) 2024.03.11
SWEA 1217 : 거듭제곱  (0) 2024.03.11
SWEA 1215 : 회문1  (0) 2024.03.05
SWEA 1213 : String  (0) 2024.03.05
SWEA 2005 : 파스칼의 삼각형  (0) 2024.02.23