[백준] 소수&팰린드롬 c++
2024. 11. 1. 14:09ㆍ코딩테스트
소수&팰린드롬
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 256 MB | 32188 | 10528 | 7796 | 30.957% |
문제
어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.
어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다.
출력
첫째 줄에 조건을 만족하는 수를 출력한다.
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
//뒤집은수가 일치하는 지 체크하는 함수
bool IsPalin(int a);
int main()
{
const int maxSize = 10000001;
//배열의 크기가 커 힙으로 할당
int* A = new int[maxSize];
int N;
cin >> N;
for (int i = 2; i < maxSize; i++)
{
A[i] = i;
}
//소수는 i의 제곱근을 넘지 않는다.
for (int i = 2; i < sqrt(maxSize); i++)
{
if (A[i] == 0)
{
continue;
}
for (int j = i * 2; j <= maxSize; j += i)
{
A[j] = 0;
}
}
//N보다 크며, 그 중 가장 작은 값부터 탐색
for (int i = 0; i < maxSize; i++)
{
if (A[i] >= N)
{
if (IsPalin(A[i]))
{
cout << A[i];
break;
}
}
}
}
bool IsPalin(int a)
{
//비교를 위해 string으로 형변환
string str = to_string(a);
int start = 0;
int end = str.size() - 1;
//start와 end를 비교해 값이 같을때마다 위치를 이동.
while (start < end)
{
if (str[start] != str[end])
{
return false;
}
start++;
end--;
}
return true;
}
'코딩테스트' 카테고리의 다른 글
[백준] GCD(n, k) = 1 c++ (1) | 2024.11.08 |
---|---|
[백준] 제곱 ㄴㄴ 수 c++ (1) | 2024.11.07 |
[백준] 거의 소수 c++ (0) | 2024.11.01 |
[백준] 소수 구하기 c++ (0) | 2024.11.01 |
[백준] 잃어버린 괄호 c++ (0) | 2024.11.01 |