SWEA 10570 제곱 팰린드롬 수 D3 (자바 Java)

SWEA 10570 제곱 팰린드롬 수

문제 정보

  • 문제 출처 : SW Expert Academy
  • 문제 번호 : 10570
  • 문제 제목 : 제곱 팰린드롬 수
  • 문제 난이도 : D3
  • 풀이 언어 : Java

문제

앞으로 읽어도 뒤로 읽어도 똑같은 문자열을 팰린드롬 혹은 회문이라고 부른다. 어떠한 실수 N이 양의 정수이며, 십진수로 표현했을 때 팰린드롬이면 이 수를 팰린드롬 수라고 부른다.

어떠한 양의 정수 N에 대해서, N과 √N이 모두 팰린드롬이면 이 수를 제곱 팰린드롬 수 라고 부른다.

예를 들어, 121은 제곱 팰린드롬 수인데, 121이 팰린드롬이며, 121의 제곱근인 11 역시 팰린드롬이기 때문이다.

A 이상 B 이하 제곱 팰린드롬 수는 모두 몇 개인가?

접근

반복문과 조건문을 활용해 문제를 풀었다.

풀이

  • Scanner 객체를 사용하여 입력을 읽습니다. T는 테스트 케이스의 수를 나타냅니다.
  • 각 테스트 케이스마다 범위 [A, B]를 읽습니다.
  • isPalindrome 함수는 주어진 정수가 팰린드롬인지 확인합니다. 문자열로 변환한 후, 문자열의 양 끝에서부터 문자를 비교하여 팰린드롬 여부를 판단합니다.
  • 범위 [A, B] 내의 각 숫자 i에 대해, 그 숫자가 팰린드롬인지 확인합니다.
  • 그 숫자의 제곱근을 구하고, 제곱근이 정수이고 팰린드롬인지 확인합니다.
  • 두 조건을 모두 만족하면 count를 증가시킵니다.
  • 각 테스트 케이스의 결과를 #test_case count 형식으로 출력합니다.

후기

어렵지 않게 해결한 문제이다.

코드

Java
import java.util.Scanner;
import java.io.FileInputStream;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T;
        T=sc.nextInt();
 
        for(int test_case = 1; test_case <= T; test_case++)
        {
            int A = sc.nextInt();
            int B = sc.nextInt();
            int count = 0;
 
            for (int i = A; i <= B; i++) {
                if (isPalindrome(i)) {
                    int sqrt = (int) Math.sqrt(i);
                    if (sqrt * sqrt == i && isPalindrome(sqrt)) {
                        count++;
                    }
                }
            }
            System.out.println("#" + test_case + " " + count);
        }
    }
 
    public static boolean isPalindrome(int num) {
        String str = Integer.toString(num);
        int len = str.length();
        for (int i = 0; i < len / 2; i++) {
            if (str.charAt(i) != str.charAt(len - 1 - i)) {
                return false;
            }
        }
        return true;
    }
}
Java

Leave a Comment