[S/W 문제해결 기본] 3일차 - 회문1 (D3)
문제 링크
- 회문1은 8*8 글자배열에서 타겟단어의 글자수가 주어지고, 가로세로 탐색해서 타겟 단어의 개수를 찾는 문제이다.
 
- 스트링.charAt으로 비교하는 방법 / 스트링을 배열에 넣어서 인덱스로 확인하는 방법 / 스트링 버퍼 뒤집어서 확인해보는 방법
 
- 위의 세가지 방법 중 스트링버퍼를 매개변수로 받아서 해당 단어가 회문인지 true/false 출력하는 메소드를 만들었다.
 
Solution
package swea;
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class p1215 {
    static char[][] map = new char[8][8]; 
     
    public static boolean palindrome(StringBuffer sb) {
        String str1 = sb.toString();
        String str2 = sb.reverse().toString();
        sb.reverse();
        if (str1.equals(str2))
            return true;
        return false;
    }
     
    public static int findPalindrome(char[][] arr, int len) {
        int ans = 0;
        
        for (int i = 0; i < 8; i++) { 
            StringBuffer rowSb = new StringBuffer(); 
            for (int j = 0; j < 8; j++) {
                rowSb.append(map[i][j]); 
                if (rowSb.length() > len) {
                    rowSb.delete(0, 1); 
                }
                if (rowSb.length() == len && palindrome(rowSb)) { 
                    ans++;
                }
            }
        }
        
        for (int j = 0; j < 8; j++) { 
            StringBuffer colSb = new StringBuffer(); 
            for (int i = 0; i < 8; i++) {
                colSb.append(map[i][j]); 
                if (colSb.length() > len) {
                    colSb.delete(0, 1); 
                }
                if (colSb.length() == len && palindrome(colSb)) { 
                    ans++;
                }
 
            }
        }
        return ans;
    }
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        for (int t = 1; t <= 10; t++) {
             
            int ans = 0; 
            int len = Integer.parseInt(br.readLine()); 
            
            for (int i = 0; i < 8; i++) {
                map[i] = br.readLine().toCharArray(); 
            }
            System.out.printf("#%d %d\n", t, findPalindrome(map, len));
        }
    }
}