본문 바로가기

알고리즘/BOJ

2023번

2023번 - 신기한 소수


처음에 에라토스테네스의 체를 이용해서 문제를 풀려고 했지만, 오히려 메모리 초과가 발생했다.


그래서 질문 게시판을 보고 힌트를 얻어서, 재귀함수를 통해서 정답을 구했다.


앞에서 부터 숫자를 채워가면서, 그 수가 소수인지 판별하는 함수를 만들어서 확인해줬다.


맨 앞 숫자는 0과 1이 들어가면 안된다는 점을 예외로 체크해줬다.


<정답 코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include<vector>
#include<math.h>
#include<string>
using namespace std;
int n;
 
bool checkPrime(int num)
{
    for (int i = 2; i*<= num; i++)
    {
        if (num%i == 0)
        {
            return false;
        }
    }
    return true;
}
void go(int len,string s)
{
    if (len == 0)
    {
        cout << s << "\n";
        return;
    }
 
    for (int i = 0; i <= 9; i++)
    {
        if ((i == 0 || i==1&& len == n)
        {
            continue;
        }
        string tmp = s;
        tmp += i + '0';
        int t = stoi(tmp);
 
        if (checkPrime(t))
        {
            go(len - 1, tmp);
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n;    
    string s = "";
    go(n,s);
    
 
    return 0;
}
cs


반응형

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

2210번  (0) 2018.02.03
1941번  (5) 2018.02.03
2661번  (0) 2018.02.02
1339번  (2) 2018.01.29
6064번  (0) 2018.01.29