CodingTest/Java

BOJ_11068 : 회문인 수

Soom_1n 2024. 11. 25. 09:58

πŸ‘‰ 문제링크



πŸ”Έ 문제 뢄석 πŸ”Έ

  • μž…λ ₯된 μˆ˜κ°€ 회문인 수(νŒ°λ¦°λ“œλ‘¬; palindrome) 인지 ν™•μΈν•œλ‹€.
  • 2λΆ€ν„° 64 κΉŒμ§€ 기수 λ³€ν™˜ μ‹œ 회문인 수이면 1을, μ•„λ‹ˆλΌλ©΄ 0을 λ°˜ν™˜ν•œλ‹€.

πŸ”Έ 문제 풀이 πŸ”Έ

  • νšŒλ¬Έμ„ ν™•μΈν•˜κΈ° μœ„ν•΄ λ¬Έμžμ—΄ λŒ€μΉ­ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€.
  • 64 자리 κΉŒμ§€μ˜ 기수 λ³€ν™˜μ„ κ΅¬ν˜„ν•œλ‹€.
    • Integer.toString(숫자, 기수) λ©”μ„œλ“œλŠ” μ΅œλŒ€ 32 자리 기수 λ³€ν™˜μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ—, 64 자리 κΉŒμ§€ λ³€ν™˜μ΄ κ°€λŠ₯ν•œ λ©”μ„œλ“œλ₯Ό 직접 κ΅¬ν˜„ν•œλ‹€.
    • 기수 λ³€ν™˜μ„ μœ„ν•΄ 64개의 λ³€ν™˜μ„ μœ„ν•œ λ¬Έμžκ°€ ν•„μš”ν•˜λ‹€.

πŸ”Έ μ½”λ“œ πŸ”Έ

import java.io.*;

public class Main {
    private static final String DIGITS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@";

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

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

        for (int t = 0; t < T; t++) {
            int n = Integer.parseInt(br.readLine());

            sb.append(isHeaMoon(n) ? 1 : 0).append('\n');
        }

        bw.write(sb.toString());
        bw.flush();
    }

    private static boolean isHeaMoon(int n) {

        for (int i = 2; i <= 64; i++) {
            char[] chars = customBase(n, i).toCharArray();
            boolean flag = true;

            for (int j = 0; j <= chars.length / 2; j++) {
                if (chars[j] != chars[chars.length - j - 1]) {
                    flag = false;
                    break;
                }
            }

            if (flag) return true;
        }

        return false;
    }

    private static String customBase(int num, int base) {
        StringBuilder result = new StringBuilder();

        while (num > 0) {
            result.append(DIGITS.charAt(num % base));
            num /= base;
        }

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

πŸ”Έ μ½”λ“œ 해석 πŸ”Έ

  • isHeaMoon() λ©”μ„œλ“œμ—μ„œ μž…λ ₯된 μˆ˜κ°€ νšŒλ¬ΈμΈμ§€ ν™•μΈν•œλ‹€.
    • 2λΆ€ν„° 64κΉŒμ§€ 기수 λ³€ν™˜μ„ 해보며 회문이면 1, μ•„λ‹ˆλ©΄ 0을 λ°˜ν™˜ν•œλ‹€.
  • customeBase() λ©”μ„œλ“œμ—μ„œ 기수 λ³€ν™˜μ„ μ§„ν–‰ν•œλ‹€.
    • DIGISTS 에 적힌 64개의 문자 쀑 ν•˜λ‚˜λ‘œ λ³€ν™˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•œλ‹€.
    • num을 base둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 값을 λˆ„μ ν•œ ν›„, λ’€μ§‘μ–΄ λ°˜ν™˜ν•œλ‹€.

πŸ”Έ end πŸ”Έ

728x90