[SWEA] 10570. 제곱 팰린드롬 수
문제 링크
풀이 과정
boolean[] palindrome = new boolean[1001];
for (int num = 1; num <= 35; num++) {
if (isPalindrome(String.valueOf(num).toCharArray()) && isPalindrome(String.valueOf(num * num).toCharArray()))
palindrome[num * num] = true;
}
문제의 제곱 팰린드롬 수는 1000까지 가능합니다. $35^2=1225$니까 1000을 커버할 수 있으므로, 위처럼 for문을 돌며 num과 $num^2$이 팰린드롬 수인지를 확인하고, 둘 다 팰린드롬 수면 palindrom 배열 요소에 true 로 체크합니다.
코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int TC = sc.nextInt();
boolean[] palindrome = new boolean[1001];
for (int num = 1; num <= 35; num++) {
if (isPalindrome(String.valueOf(num).toCharArray()) && isPalindrome(String.valueOf(num * num).toCharArray()))
palindrome[num * num] = true;
}
for (int tc = 1; tc <= TC; tc++) {
int A = sc.nextInt();
int B = sc.nextInt();
int cnt = 0;
for (int num = A; num <= B; num++) if (palindrome[num]) cnt++;
System.out.println("#" + tc + " " + cnt);
}
}
static boolean isPalindrome(char[] arr) {
int left = arr.length / 2 - 1, right = arr.length % 2 == 0 ? arr.length / 2 : arr.length + 1;
while (left >= 0 && right < arr.length) {
if (arr[left] != arr[right]) return false;
left--;
right++;
}
return true;
}
}
댓글남기기