회문2
in Algorithm on SW Expert Academy
Software Expert Academy [1216] 회문2
풀이
- 회문 중 가장 긴 길이를 출력한다. 이때, 출력에서 tc를 출력하면 오답이고, T를 출력해야함을 주의한다..
소스코드
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Solution {
private static String[][] map;
private static int[] result;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (int tc = 1; tc <= 10; tc++) {
int T = sc.nextInt();
result = new int[101];
map = new String[100][100];
for (int i = 0; i < 100; i++) {
String str = sc.next();
map[i] = str.split("");
}
findPalindrome(true);
findPalindrome(false);
System.out.println("#" + T + " " + findLongestStr());
}
}
private static void findPalindrome(boolean isRightCheck) {
List<String> strList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
for (int k = 0; k < 100 - j; k++) {
if (isRightCheck) {
strList.add(map[i][j + k]);
} else {
strList.add(map[j + k][i]);
}
if (isPalindrome(strList)) {
int length = strList.size();
result[length] = result[length] + 1;
}
}
strList.clear();
}
}
}
private static boolean isPalindrome(List<String> strList) {
int strLength = strList.size();
for (int i = 0; i < strLength / 2; i++) {
String checkStr1 = strList.get(i);
String checkStr2 = strList.get(strLength - 1 - i);
if (!checkStr1.equals(checkStr2)) return false;
}
return true;
}
private static int findLongestStr() {
for (int i = 100; i > 0; i--) {
if (result[i] != 0) {
return i;
}
}
return -1;
}
}