[SWEA] 1215. 회문1 _ JAVA

jii0_0·2022년 8월 13일
0

SW Expert Academy

목록 보기
15/33
post-thumbnail

[S/W 문제해결 기본] 3일차 - 회문1 (D3)

문제 링크

  • 회문1은 8*8 글자배열에서 타겟단어의 글자수가 주어지고, 가로세로 탐색해서 타겟 단어의 개수를 찾는 문제이다.
  • 스트링.charAt으로 비교하는 방법 / 스트링을 배열에 넣어서 인덱스로 확인하는 방법 / 스트링 버퍼 뒤집어서 확인해보는 방법
  • 위의 세가지 방법 중 스트링버퍼를 매개변수로 받아서 해당 단어가 회문인지 true/false 출력하는 메소드를 만들었다.

Solution

package swea;

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
// [S/W 문제해결 기본] 3일차 - 회문1
public class p1215 {
    static char[][] map = new char[8][8]; // 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); // len보다 길면 맨앞 문자 빼기
                }
                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); // len보다 길면 맨앞 문자 빼기
                }
                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));
        }
    }
}
profile
느려도 꾸준히

0개의 댓글