: 문자열 전체를 reverse 한후에 하니까 맞았음.
64점 맞았을 때, reverse에서 시간적인 효율이
떨어진다고 판단을 했음..
-> 전체를 보고 처리하자.
시간 초과되서 틀렸다고 생각할 때, 풀이전략에서 수정할
부분이 있는지 확인을 하고, 주석 걸고,
정신차리고 다시 풀자. 조금만 바꿔주면, 맞는 문제임.
-> 64.3점 맞음.
코딩하면서 생각하지는 못함..
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 22:28 ~ 23:10
bool prime(string word)
{
long long num = stoll(word);
//i < 루트num 할수는 없으니
// 11
// 2 3 4
if(num < 2)
return false;
for(long long i = 2; i * i <= num; ++i)
{
if(num % i == 0)
return false;
}
return true;
}
int solution(int n, int k) {
int answer = 0;
// 101 은 소수가 될수 없음.
// 437674 / 3 , 145891
// 1
// 145891 / 3 . 48630
// 1
// 16210 . 0
// 0
// 나눠서 나머지가 0일때까지 진행해서 k진수로 변경해서 string에다가 저장하자.
string s = "";
while( n != 0)
{
string temp = to_string( n % k);
n /= k;
if(temp != "0")
s += temp;
else if(temp == "0")
{
//0을 만나면 계속 누적으로 만든 문자열이 소수인지를 판별하자.
// revere 해서 보내자.
if(!s.empty())
{
reverse(s.begin(), s.end());
if(prime(s))
{
++answer;
s.clear();
}
}
}
}
if(!s.empty())
{
if(prime(s))
{
++answer;
//s.clear();
}
}
// 잘라가지고
//answer = stoi(s);
//answer = s.length();
return answer;
}