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

[백준/C++] 13561번 회문

kimbodle 2024. 2. 4. 21:23

문제

n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다. 예를 들면, 12468은 12468 = 1 × 104 + 2 × 103 + 4 × 102 + 6 × 101 + 8 × 100로 표현할 수 있다.

회문(Palindrome)이란 앞으로 읽으나 뒤로 읽으나 같은 글을 말한다. 예를 들면, madam, level, 12321은 회문이다. 반면에, Chung-ang이나 university, 54899는 회문이 아니다.

어떤 십진수의 수 A가 주어졌을 때, 이를 n진수로 표현하면 회문인지 아닌지 판별하는 프로그램을 만드시오.

입력

첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1000)이 주어진다.

둘째 줄부터 T줄에 걸쳐 테스트 케이스별로 어떤 십진수의 수 A(1 ≤ A ≤ 100,000,000,000)와 n(2 ≤ n ≤ 16)이 공백을 두고 주어진다.

출력

각 줄마다 테스트 케이스가 회문일 경우 1, 아닐 경우에는 0을 출력한다.

 

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
    int T;
    string arr = "0123456789ABCDEF";
    
    cin >> T;

    for(int i = 0; i < T; i++){
        string result = "";
        long long a;
        int b;
        cin >> a >> b;
        
        while(a > 0){
            result = arr[a % b] + result;
            a = a / b;
        }

        string reversed = result;
        reverse(reversed.begin(), reversed.end());

        if(result == reversed){
            cout << "1" << "\n";
        }
        else {
            cout << "0" << "\n";
        }
    }

    return 0;
}

문제풀이

0부터 F 문자가 담긴 string형 변수를 선언하고 입력받은 수들에 따른 문자의 결과를 변수에 하나씩 저장한 뒤에 출력한다.

  • 0~F의 순서를 가진 string을 선언한다
  • 입력받은 십진수와 n로 나눈 나머지를 이용해 n진수로 표현된 숫자를 구한다
  • 결과를 뒤집은 후 회문이면 1 아니면 0을 출력한다