문제
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을 출력한다
'Koala - 13기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/c++] 10825: 국영수 (0) | 2024.02.04 |
---|---|
문제 https://www.acmicpc.net/problem/11718 [pthyon] (0) | 2024.02.04 |
[백준/python] 2789번: 유학 금지 (0) | 2024.02.01 |
[백준/Python] 1316:그룹 단어 체커 (0) | 2024.01.29 |
[백준/c++] 2596: 비밀편지 (0) | 2024.01.29 |