[SWEA] 10570. 제곱 팰린드롬 수

1 분 소요

문제 링크

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

카테고리:

업데이트:

댓글남기기