https://www.acmicpc.net/problem/2023
자릿수가 한 개인 소수 2,3,5,7을 시작으로 탐색한다.
이어서 자릿수가 두 개인 현재 수 * 10 + a를 계산하여 이 수가 소수인지 판단하고,
소수라면 재귀 함수로 자릿수를 하나 또 늘린다.
단 a가 짝수인 경우 항상 2를 약수로 가지므로 가지치기로 a가 짝수인 경우를 제외한다.
이런 방식으로 자릿수를 N까지 확장했을 때 그 값이 소수라면 해당 값을 출력한다.
이러한 방식으로 DFS를 이용한 탐색이 가능하다.
#include <string>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <deque>
#include <algorithm>
#include <iostream>
#include <bitset>
#include <set>
using namespace std;
int N;
void DFS(int num, int j);
bool isPrime(int num);
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
DFS(2, 1);
DFS(3, 1);
DFS(5, 1);
DFS(7, 1);
return 0;
}
void DFS(int num, int j)
{
if (j == N) {
if (isPrime(num)) {
cout << num << "\n";
}
return;
}
for (int i = 1; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
if (isPrime(num * 10 + i)) {
DFS(num * 10 + i, j + 1);
}
}
}
bool isPrime(int num)
{
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) return false;
}
return true;
}
'콘솔창 & 윈도우창 > 코딩 테스트' 카테고리의 다른 글
[백준 실버3] 9095 1, 2, 3 더하기 (0) | 2024.10.28 |
---|---|
프로그래머스 LV.2 멀리 뛰기 (0) | 2024.10.28 |
[백준 실버 5] 1427 소트인사이드 (0) | 2024.10.23 |
[백준 골드2] 1377 버블 소트 (1) | 2024.10.18 |
[실버3] 1021 회전하는 큐 (0) | 2024.10.18 |