코딩테스트/백준

[백준 - 11068] 회문인 수 .java

머밍 2025. 4. 28. 17:36

https://www.acmicpc.net/problem/11068

 

1. 2부터 64진법까지 돌면서 진법으로 계산한 결과의 int 배열을 리턴값으로 가지는 함수 생성

2. 각 결과의 배열 크기는 자릿수만큼으로 계산함! -> 이부분 중요 값을 구해야 회문구할때 편함

3. 진법 결과가 회문인지 검사하는 함수 생성 -> 배열 크기의 반까지 돌며 각자리가 같은지 검사

하나의 진법이 참이면 참을 반환

 

회문은 배열의 길이가 중요하다 빈자리는 비교하면 안됨 -> 따로 코드구현없이 처음 배열을 생성할때 초기화를 잘하면 된다

 

 

import java.util.Scanner;

public class test1 {
    //진법 변환
    static int[] convert(int x, int b){

        int len = 0, num = x;
        //자릿수를 계산
        while(num>0){
            num/=b;
            len++;
        }
        //자릿수를 기반으로 해당 크기의 배열을 생성
        int[] nums = new int[len];
        len = 0;
        while(x>0){
            nums[len++]=x%b;
            x/=b;
        }
        return nums;
    }
    //배열의 앞에서부터와 뒤에서부터 비교하며 회문 여부 체크
    static boolean isP(int[] nums){
        for(int i=0; i<nums.length/2; i++){
            if(nums[i]!=nums[nums.length-i-1]){
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int T  = sc.nextInt();

        while(T-- > 0) {
            int x= sc.nextInt();
            boolean answer = false;
            for(int i = 2; i <= 64; i++){
                int[] digits = convert(x,i);
                if(isP(digits)){
                    answer = true;
                    break;
                }
            }
            System.out.println(answer? "1":"0");

        }
    }
}