1747번: 소수&팰린드롬
어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,
www.acmicpc.net
팰린드롬 수는 어떤 수를 반대로 뒤집고 그 수가 같다면 팰린드롬 수이다.
에라토스테네스의 채를 사용해서 소수를 판단해주고 문자열을 사용해서 뒤집고 체크해주면 되는 쉬운 문제였다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<bool> sieve(1100001);
void era(int n) {
fill(sieve.begin(), sieve.end(), true);
sieve[0] = sieve[1] = false;
for (int i = 2; i * i <= 1100000; i++) {
if (sieve[i]) {
for (int j = i * 2; j <= 1100000; j += i) sieve[j] = false;
}
}
}
bool palindrome(string a) {
string b(a);
reverse(b.begin(), b.end());
if (a == b) return true;
return false;
}
int main() {
int n;
cin >> n;
era(n);
for (int i = n; i < 1100001; i++) {
if (sieve[i] && palindrome(to_string(i))) {
cout << i << endl; break;
}
}
return 0;
}
주의해야 될 점은 N이 백만까지인데 뒤집은 숫자가 백만보다 클 수 있으므로 여유롭게 110만으로 설정해뒀다.
'알고리즘 > BOJ' 카테고리의 다른 글
BOJ 팰린드롬? (0) | 2020.09.22 |
---|---|
BOJ 18870 좌표 압축 (0) | 2020.09.21 |
백준 2086 피보나치 수의 합 (0) | 2020.09.20 |
BOJ 11778 피보나치 수와 최대공약수 (0) | 2020.09.19 |
BOJ 11444 피보나치 수 6 (0) | 2020.09.18 |