본문 바로가기

알고리즘

Boj 1747 c++ 소수&팰린드롬

10번 만에 맞춘 듯

#include<iostream>
#include<vector>

using namespace std;


int main(){


    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    long long n;


    cin>>n;

    long long start=n;

    while(1){

       vector<int> ans(100);
       n=start;
        
        if(n==1){
            start++;
            continue};

       int ans_check=1;

        int num_size=0;
        while(n>=1){
            ans[num_size]=n%10;
            n/=10;
            num_size++;
        }
        for(int i=0; i<num_size/2; i++){
            if(ans[i]!=ans[num_size-1-i]){
                ans_check=0;
                break;
            }

        }

        if(ans_check==1){

       for(long long i=2; i*i<=start; i++){
           if(start%i==0){
                ans_check=0;
                break;
           }
       }}


        if(ans_check==1){
            cout<<start;
            break;}

    start++;



    }
    


}

n부터 증가시키며 팰린드롬 수인지 검사한 후, 옳은 경우에만 소수 검사를 하고 둘 모두 만족한 경우에 수를 출력하는 알고리즘.

 

*팰린드롬 수란?

거꾸로 읽었을 때에도 같은 수  ex) 101, 31413

이를 찾는 알고리즘은 숫자를 string의 형태로 저장한 후, 배열의 길이의 절반만큼 루프를 돌려 대칭적으로 이루어졌는지 확인하면 된다. 이때 인덱스 값이 옳은지 확인해야 한다.

 

'알고리즘' 카테고리의 다른 글

Boj 3896 c++ 소수사이 수열  (0) 2025.05.27
Boj 1990 c++소수인 팰린드롬  (0) 2025.05.26
Boj 1920 c++ 수 찾기(해시연습)  (0) 2025.05.24
Boj 32201 c++ 눈사람(해시)  (0) 2025.05.24
Boj 1193 c++눈물의 노가다  (0) 2025.05.23