⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
DFS와 구현으로 문제를 해결했습니다. 주어진 최대 7자리의 숫자를 전부 1의 자리로 나눠서 모두 숫자로 만들어서 vector에 삽입해둔 다음에, 주어진 값을 모든 경우의 수를 생성해 소수인지 판단하는 문제입니다. 구현할 때 여러 TestCase가 존재하기 때문에 초기화를 잘 쳐야하고, 중복된 값이 계속해서 답이 될 수 있기 때문에 map을 사용해서 이미 정답으로 체점했던 소수들은 제외하고 정답을 체크했습니다. 아래는 정답코드입니다.
문제를 좀 더럽게 풀었습니다.
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<map>
#define MAX 10000000
using namespace std;
int testCase,answer;
string number;
map<int,int> m;
vector<int> divideNum;
vector<bool> checkPrime;
void checkPrimeNumber() {
int n = 9999999;
checkPrime.assign(n + 1, true);
for(int i = 2; i * i <= n; i++){
if(checkPrime[i]){
for(int k = i * i; k <= n; k += i){
checkPrime[k] = false;
}
}
}
checkPrime[1] = false;
checkPrime[0] = false;
}
int visited[11];
void divideNumber(string num) {
divideNum.clear();
for(int i = 0; i < num.length(); i++){
divideNum.push_back(num[i] - '0');
}
}
vector<int> v;
void dfs(int cnt, int current) {
if(cnt == current) {
int primeNumber = 0;
for(int i = 0; i < v.size(); i++){
primeNumber += v[i];
primeNumber *= 10;
}
if(primeNumber) primeNumber /= 10;
if(checkPrime[primeNumber] && !m[primeNumber]){
m[primeNumber] = 1;
answer++;
}
return;
}
for(int i = 0; i < divideNum.size(); i++){
if(!visited[i]){
visited[i] = 1;
v.push_back(divideNum[i]);
dfs(cnt, current + 1);
visited[i] = 0;
v.pop_back();
}
}
}
int solve() {
memset(visited,0,sizeof(visited));
answer = 0;
for(int i = 1; i <= divideNum.size(); i++){
for(int j = 0; j < divideNum.size(); j++){
if(!visited[j]){
visited[j] = 1;
v.push_back(divideNum[j]);
dfs(i,1);
v.pop_back();
visited[j] = 0;
}
}
}
return answer;
}
int main() {
cin >> testCase;
checkPrimeNumber();
for(int i = 0; i < testCase; i++){
m.clear();
cin >> number;
divideNumber(number);
sort(divideNum.begin(), divideNum.end());
cout << solve() << "\n";
}
return 0;
}
'PS > BaekJoon' 카테고리의 다른 글
[C++/16958] 텔레포트 (0) | 2024.08.14 |
---|---|
[C++/27210] 신을 모시는 사당 (0) | 2024.08.09 |
[C++/1019] 책 페이지 (0) | 2024.08.01 |
[C++/1749] 점수 따먹기 (0) | 2024.08.01 |
[C++/13333] Q-인덱스 (0) | 2024.07.29 |