프로그래머스 소수찾기 C++
2023. 10. 19. 17:00ㆍ알고리즘
문제는 먼저 numbers 가지고 만들 수 있는 모든 숫자들을 만들고, 만든 다음에 소수인지 확인하면 된다.
numbers가지고 만들 수 있는 모든 숫자들을 어떻게 만들 수 있을까?
c++ <algorithm> 에 정의되어 있는 next_permutation 함수를 사용했다
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cmath>
using namespace std;
unordered_map<int, int> m;
bool isPrime(int x) {
if (x == 0 || x == 1) {
return false;
}
if (x == 2) {
return true;
}
for (int i = 2; i <= sqrt(x);i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
int solution(string numbers) {
int answer = 0;
vector<char> v;
for (int i = 0; i < numbers.size();i++) {
v.push_back(numbers[i]);
}
sort(v.begin(), v.end());
do {
string temp = "";
for (int i = 0;i < v.size();i++) {
temp.push_back(v[i]);
m[stoi(temp)]++;
}
} while (next_permutation(v.begin(), v.end()));
for (auto it = m.begin(); it != m.end(); it++) {
if (isPrime(it->first)) {
answer++;
}
}
cout << answer << endl;
return answer;
}
int main(void) {
string numbers = "002";
solution(numbers);
return 0;
}
코드를 이렇게 작성했습니다.
그런데 계속해서 2, 10, 11 테스트케이스만 틀렸다.
permutation함수가 사전 순으로 가장 가까운 다음 상태로 배열하는 함수이라고 한다. 따라서 시작 지점이 오름차순으로 정렬되어 있어야 모든 경우의 수를 만들 수 있다. 이를 고려해서 코드를 다시작성해서 맞췄다.
'알고리즘' 카테고리의 다른 글
프로그래머스 모의고사 C++ (0) | 2023.10.19 |
---|---|
프로그래머스 같은 숫자는 싫어 C++ (0) | 2023.10.19 |
프로그래머스 최소직사각형 C++ (0) | 2023.10.19 |
프로그래머스 H-Index C++ (0) | 2023.10.19 |
프로그래머스 K번째 수 C++ (0) | 2023.10.19 |