-
완전탐색 > 소수 찾기프로그래머스(Programmers) 2020. 2. 5. 15:21반응형
https://programmers.co.kr/learn/courses/30/lessons/42839
에라토스테네스의 체를 사용하던지 속도가 느리다면 메모제이션이나 DP를 사용하면 된다.
반복되는 계산을 줄이는 것이 필수.
Source
#include <string> #include <vector> #include <algorithm> #include <set> using namespace std; bool isPrime(int number) { if (number == 1) return false; if (number == 2) return true; if (number % 2 == 0) return false; bool isPrime = true; for (int i = 2; i <= sqrt(number); i++) { if (number% i == 0) return false; } return isPrime; } bool compare(char a, char b) { return a > b; } int solution(string numbers) { int answer = 0; string temp; temp = numbers; sort(temp.begin(), temp.end(), compare); vector<bool> prime(std::stoi(temp) + 1); prime[0] = false; for (long long i = 1; i < prime.size(); i++) { prime[i] = isPrime(i); } string s, sub; s = numbers; sort(s.begin(), s.end()); set<int> primes; int l = s.size(); do { for (int i = 1; i <= l; i++) { sub = s.substr(0, i); if (prime[std::stoi(sub)]) { primes.insert(std::stoi(sub)); } } } while (next_permutation(s.begin(), s.end())); answer = primes.size(); return answer; }
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
완전탐색 > 모의고사 (0) 2020.02.06 2017 팁스타운 > 짝지어 제거하기 (0) 2020.02.06 스택/큐 > 프린터 (0) 2018.09.30 힙(Heap) > 더 맵게 (0) 2018.09.30 정렬 > H-Index (0) 2018.09.30