[c++ 백준] (1747번) 소수&팰린드롬

728x90

문제

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.

어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다.

출력

첫째 줄에 조건을 만족하는 수를 출력한다.

https://www.acmicpc.net/problem/1747

 

1747번: 소수&팰린드롬

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,

www.acmicpc.net


풀이과정
  • 수를 입력받고 그 수를 기준으로 반복문을 돕니다.
  • 반복문을 돌면서 수가 소수 이면서 팰린드롬 인지 판별합니다.
  • 수가 조건을 만족하면 출력하고 반복문을 탈출합니다.

코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>

#define endl "\n"
using namespace std;

// 소수 판별 함수
bool isPrime(int N)
{
	if (N < 2) return false;
	for (int i = 2; i <= sqrt(N); i++)
	{
		if (N % i == 0) return false;
	}
	return true;
}
// 팰린드롬 판별 함수
bool isPalindrome(string S)
{
	for (int i = 0 , j = S.size() - 1 ; i < S.size() ; i++ , j--)
	{
		if (S[i] != S[j]) return false;
	}
	return true;
}

void Answer()
{
	int N;
	cin >> N;
	while (true)
	{
		// 소수 이면서 팰린드롬이면 출력
		if (isPrime(N) && isPalindrome(to_string(N)))
		{
			cout << N;
			break;
		}
		N++;
	}
}

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	Answer();
}

728x90