[Programmers] 소수 찾기
Date:
[Programmers] 소수 찾기
Problem URL : 소수 찾기
풀이1 (Unordered_map을 이용한 풀이)
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <unordered_map>
using namespace std;
unordered_map<int, bool> um;
bool isPrime(int n) {
if (n < 2) return false;
int root = sqrt(n);
for (int i = 2; i <= root; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int solution(string numbers) {
int answer = 0;
sort(numbers.begin(), numbers.end());
do {
string temp = "";
for (int i = 0; i < numbers.size(); i++) {
temp.push_back(numbers[i]);
int tmp = stoi(temp);
if(!um[tmp]) {
um[tmp] = true;
if(isPrime(tmp)){
answer++;
}
}
}
} while (next_permutation(numbers.begin(), numbers.end()));
return answer;
}
풀이 2(Unordered_set을 이용한 풀이)
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <unordered_set>
using namespace std;
unordered_set<int> us;
bool isPrime(int n) {
if (n < 2) return false;
int root = sqrt(n);
for (int i = 2; i <= root; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int solution(string numbers) {
sort(numbers.begin(), numbers.end());
do {
string temp = "";
for (int i = 0; i < numbers.size(); i++) {
temp.push_back(numbers[i]);
int tmp = stoi(temp);
if(isPrime(tmp)){
us.insert(tmp);
}
}
} while (next_permutation(numbers.begin(), numbers.end()));
return us.size();
}
Comments
풀이 2가 풀이 1보다 조금 더 빠르다.
순열 활용 방법과 unordered_set, unorded_map 활용법을 잘 익혀두자
댓글