[백준(BOJ)] 회문인 수(11068번)_C++
2023. 9. 12. 14:14ㆍProblem Solving/Math
728x90
반응형
SMALL
아마 대부분 비슷한 문제를 풀어본 적 있었을 것이다.
이 문제의 독특한 점은 2~64진수로 표현했을 때도 회문인지 판단해야 한다는 점이다.
B진법으로 변환하는 것은 어렵지 않다.
몫이 0일 때까지 나누면서 나머지를 저장하면 된다.
이 때, 저장되는 값들의 역순이 실제 B진수 값인데 우리는 회문인지 판단만 하면 되므로 굳이 역순으로 바꿀 필요가 없다.
B진수를 구했으면 회문인지 판단하면 된다.
이는 그냥 for문으로 대칭되는 각 자리를 비교하면 된다.
근데 한 가지 의문이 들 수 있는데 16진수까지는 9보다 큰 수를 A, B, C, ... 으로 표현한다 치더라도 그 이상의 진법에서 뭘로 표현해야할까?
그냥 수 자체로 표현하면 된다.
예로 주어진 수가 31이고, 16진수로 변환하고자 한다면
실제 값은 1F 이지만, 우리는 그냥 {1, 15} 형태로 저장하면 된다.
정답 코드
#include <iostream>
#include <vector>
using namespace std;
int T;
vector<int> v;
void dec_to_B(int n, int B){
while (1){
if (n / B == 0){
v.push_back(n);
break;
}
v.push_back(n % B);
n /= B;
}
}
bool Is_palin(){
for (int i = 0; i < v.size() / 2; i++){
if (v[i] != v[v.size() - i - 1])
return false;
}
return true;
}
int main(){
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
//input
cin >> T;
while (T--){
int n;
bool flag = false;
cin >> n;
//check palindrom
for (int B = 2; B <= 64; B++){
//init
v.clear();
dec_to_B(n, B);
if (Is_palin() == true){
flag = true;
break;
}
}
//output
if (flag == true)
cout << "1\n";
else
cout << "0\n";
}
}728x90
반응형
LIST
'Problem Solving > Math' 카테고리의 다른 글
| [백준(BOJ)] Farm(16283번)_C++ (0) | 2023.09.15 |
|---|---|
| [백준(BOJ)] 피타고라스 기댓값(11070번)_C++ (0) | 2023.09.13 |
| [백준(BOJ)] 헨리(10253번)_C++ (0) | 2023.09.05 |
| [백준(BOJ)] ACM 호텔(10250번)_C++ (0) | 2023.09.04 |
| [백준(BOJ)] 나누기(1075번)_C++ (0) | 2023.04.10 |