https://programmers.co.kr/learn/courses/30/lessons/42839
์ฝ๋
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
set<int> res;
void test(int num) {
if (num <= 1)
return;
else if (num == 2 || num == 3) {
res.insert(num);
return;
}
for (int i = 2; i < (int)sqrt(num) + 1; i++) { // num / 2 => num์ด ์ต๋ 9999999 (10^7)
if (num%i == 0)
return;
}
res.insert(num);
return;
}
void makePrime(vector<int>& memo,int num) {
if (memo.size()==0)
return;
int size = memo.size();
for (int i = 0; i < size; i++) { // 7
int value = memo[i];
test(num * 10 + value); // 10^7
memo.erase(memo.begin() + i);
makePrime(memo, num * 10 + value);
if (memo.size() == 0)
memo.push_back(value);
else
memo.insert(memo.begin() + i, value);
}
}
int solution(string numbers) {
vector<int> memorize;
for (int i = 0; i < numbers.length(); i++)
memorize.push_back(numbers[i]-'0');
makePrime(memorize, 0); //10^8
int answer = res.size();
return answer;
}
์๊ณ ๋ฆฌ์ฆ ์ค๋ช
-
memorize ๋ฐฐ์ด์ ์ ๋ ฅ๋ ์๋ค์ ๋ฐ๋๋ค.
์์ ํ๋ํ๋๊ฐ ํ๋์ ์กฐ๊ฐ
-
makePrime ํจ์์์ ์ฌ๊ท์ ์ผ๋ก ๋์ํ๋ค.
์์ง ์ฌ์ฉ๋์ง ์์ ์กฐ๊ฐ, ํ์ฌ ๋ง๋ค์ด์ง ์ ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ธฐ๊ณ ํจ์์์๋ ์์ง ์ฌ์ฉ๋์ง ์์ ์กฐ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๊บผ๋ด์ด ์ฌ๊ทํจ์๋ฅผ ํธ์ถํ๋ค.
-
test ํจ์์์ ์์์ธ์ง ํ๋ณํ๋ค.
makePrimeํจ์์์ ๋ง๋ num์ด ์์์ธ์ง ํ๋ณํด์ฃผ๋ ๋ชจ๋ํจ์.
๊ทธ๋ฅ 2๋ถํฐ sqrt(num)๊น์ง ๋๋ ค๋ณด๋ฉด์ num์ด ํด๋น ์๋ก ๋๋์ด์ง๋ ์ง ๋ณธ๋ค. ๋๋์ด์ง๋ค๋ฉด ์์๊ฐ ์๋๋ฏ๋ก false๋ฅผ returnํ๋ค.
์๊ฐ ๋ณต์ก๋
10^8 ์ ๋ (brute force ๊ฐ๋ฅํ๋ค.)
'Algorithm ๋ฌธ์ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ํ (๋ฌธ์ ํ์ด, ์ฝ๋) (0) | 2020.07.26 |
---|---|
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์นดํซ (brute force) (0) | 2020.05.28 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์ซ์์ผ๊ตฌ (brute force) (0) | 2020.05.28 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ๋ชจ์๊ณ ์ฌ (brute force) (0) | 2020.05.24 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: N์ผ๋ก ํํ (๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ) (0) | 2020.04.02 |
Comment