Koala - 13기/기초 알고리즘 스터디

[백준/java] 11068 회문인수

msms0324 2024. 1. 28. 22:15

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

 

11068번: 회문인 수

어떤 수를 왼쪽부터 읽어도, 오른쪽부터 읽어도 같을 때 이 수를 회문인 수라고 한다. 예를 들어, 747은 회문인 수이다. 255도 회문인 수인데, 16진수로 표현하면 FF이기 때문이다. 양의 정수를 입력

www.acmicpc.net

진법변환과 팰린드롬을 동시에 물어보는 문제이다.

처음에 진법변환을 해주는 함수 Integer.toString()을 이용하였으나 이 함수는 36진법까지만 변환을 해준다.

그래서 진법변환을 해주는 함수를 직접 구현한다음, 팰린드롬인지 아닌지 확인하고 결과를 출력해주면 된다.

import java.io.*;
import java.util.*;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int a=Integer.parseInt(br.readLine());

        for(int i=0;i<a;i++){
            int num=Integer.parseInt(br.readLine());
            int count=0;

            for(int j=2;j<=64;j++){

                String str=진수변환(num,j); 
                boolean flag=true;


                for(int k=0;k<str.length()/2;k++){
                    if(str.charAt(k)!=str.charAt(str.length()-1-k)){
                        flag=false;


                        break;
                    }

                }
                if(flag){
                    count++;

                }

            }

            if(count>0){
                bw.write("1\n");
            }else{
                bw.write("0\n");
            }



        }



        bw.flush();
        bw.close();
        br.close();

    }

    public static String 진수변환(int number, int N){
        StringBuilder sb = new StringBuilder();
        int current = number;
        
        while(current > 0){

            if(current % N < 10){
                sb.append(current % N);

                
            } else {
                sb.append((char)(current % N - 10 + 'A'));
            }
            current /= N;
        }


        return sb.reverse().toString();
    }
}