알고리즘/백준

2023 신기한 소수

맛있는김치찜 2020. 10. 12. 01:00
#include <iostream>

using namespace std;

int N;

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

    return true;
}

void dfs(int number, int digit)
{
    if (digit == N) {
        cout << number << endl;
    }
    for (int i = 1; i < 10; i += 2) {
        if (isPrimeNumber(number * 10 + i)) {
            dfs(number * 10 + i, digit + 1);
        }
    }
}

void solve()
{
    int start[4] = {2, 3, 5, 7};
    for (int i = 0; i < 4; i++) {
        dfs(start[i], 1);
    }
}

void input()
{
    cin >> N;
}


int main(void)
{
    input();
    solve();

    return 0;
}

dfs로 높은 자릿수부터 하나씩 감소하면서 탐색했다.

소수는 에라토스테네스의 체를 이용해서 판별했다.

자꾸 시간초과가 떠서 고생했는데 첫번째 자리부터 소수여야 한다는 조건을 이용했다.

첫번째 자리의 수를 2, 3, 5, 7로 한정시키니 시간초과 문제를 해결할 수 있었다. 

'알고리즘 > 백준' 카테고리의 다른 글

1926 그림  (0) 2020.10.12
2251 물통  (0) 2020.10.12
2234 성곽  (0) 2020.10.12
5567 결혼식  (0) 2020.10.12
1405 미친 로봇  (0) 2020.10.11