[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));
}
}
}