본문 바로가기

Algorithm/Brute Force

(C++) - 백준(BOJ) 2023번 : 신기한 소수 답

반응형

www.acmicpc.net/problem/2023

 

2023번: 신기한 소수

수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수�

www.acmicpc.net

간단한 backtracking문제였습니다.

 

풀이방법

 1. 소수인지 판단 소수라면 다음 단계로 간 후 이전 수 * 10 + 1~9까지 대입해서 소수인지 판단

 2. depth(n-1)까지 도달했다면 답 vector에 push

 

Code

#include <iostream>
#include <vector>
using namespace std;
vector <int> ans;

bool isPrime(int num){
    for(int i = 2; i*i <= num; i++){
        if(num % i == 0) return 0;
    }
    return 1;
}

void backtracking(int now,int depth,int n){
    if(isPrime(now)){
        if(depth == n){
            ans.push_back(now);
            return;
        }
        for(int i = 1; i < 10; i++){
            backtracking(now*10 + i, depth+1, n);
        }
    }
}

int main(){
    int n;
    cin >> n;
    for(int i = 2; i < 10; i++)
        backtracking(i, 1, n);
    for(int i  =0; i < ans.size(); i++){
        cout << ans[i] << '\n';
    }
}