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