SWE 1216(회문2)

1216 회문 (D3)

주어진 100x100 평면 글자판에서 가로, 세로 모두 보아 가장 긴 회문의 길이를 구하는 문제

제약사항

각 칸에 들어가는 글자는 char type, ‘A’,’B’,’C’ 중 하나,

글자판은 정사각형

1시간 정도 걸렸는데, 이것저것 해보니까 결국 스스로 풀었다. ㅠㅠ 기쁘다

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
	
	static int T = 10;
	static int mapCase= 100;
	
	public static void main(String args[]) throws Exception{
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		
		
		int i,j,k,l;
		while(T-- > 0) {
			int printNum = Integer.parseInt(bf.readLine());	
			char [][]map = new char[mapCase][mapCase];
			
			// 입력받기 
			for(i = 0 ; i < mapCase; i++) {
				String s = bf.readLine();
				for(j =0; j < mapCase; j ++) {
					map[i][j] = s.charAt(j);
//					System.out.print(map[i][j]);
				}
//				System.out.println();
			}
			
			//행 조사
			int n = 1; //찾으려는 행의 길이
			
			// n이 주어졌다고 가정해보자.
			int countRow = 0;
			
			for(i = 0 ; i < mapCase; i++) {
				int count = 0;
				for(n = 0 ; n <mapCase; n++) {
					for(j = 0; j < (mapCase-n+1); j++) {
						boolean flag = true;
							for(k = 0 ; k < n/2; k++) {						
								if(map[i][j+k] != map[i][j+n-1-k]) {
									flag = false;
								}
							}
							if(flag == true && n > count) {
								count = n;
							}
						}
					}
				if(count> countRow) {
					countRow = count;
				}
			}
			
		
			int countCol = 0;
			//열 조사
			for(i = 0 ; i < mapCase; i++) {
				int count = 0;
				for(n = 0 ; n <mapCase; n++) {
					for(j = 0; j < (mapCase-n+1); j++) {
						boolean flag = true;
						for(k = 0 ; k < n/2; k++) {						
							if(map[j+k][i] != map[j+n-1-k][i]) {
								flag = false;
							}
						}
						if(flag == true && n > count) {
							count = n;
						}
					}
				}
				if(count> countCol) {
					countCol = count;
				}
			}
			
			if(countRow >= countCol) {
				System.out.println("#"+printNum+" "+countRow);
			}else {
				System.out.println("#"+printNum+" "+countCol);
			}
		}
	
	};
}
				



참고자료

SWE selfStudyBook(3)

0%