✨k진수에서 소수 _ 전체를 한번에 처리하자.

phoenixKim·2022년 9월 15일
0

백준 알고리즘

목록 보기
122/174

최종 풀이

: 문자열 전체를 reverse 한후에 하니까 맞았음.

  • 부분으로 나뉘어서 접근했는데 틀렸다?
    전체적으로 보고 접근하도록 하자.
  • 부분 분류 해서 실행했는데 60점 맞앗다??
    -> 전체 했을때 100점 맞는다는 뜻임! 무너지지 말자.

😄교훈

  • 64점 맞았을 때, reverse에서 시간적인 효율이
    떨어진다고 판단을 했음..
    -> 전체를 보고 처리하자.

  • 시간 초과되서 틀렸다고 생각할 때, 풀이전략에서 수정할
    부분이 있는지 확인을 하고, 주석 걸고,
    정신차리고 다시 풀자. 조금만 바꿔주면, 맞는 문제임.

풀이전략

  • 0을 만날때마다 string 쌓은 것을 reverse 한후에
    long long으로 변경해서 소수 판별을 진행함.

-> 64.3점 맞음.

개선해야 할점.

    1. 문자열 길어질수 있으므로 longlong
    1. 문자열을 따로 따로 reverse, 소수판별을 하게 되므로
      성능이 떨어질 수 잇음.
      -> 한번에 reverse 한 후, '0' 발견 시 그 때서야 소수판별 하자.

전체를 한번에 처리하는 방법이 있음.

코딩하면서 생각하지는 못함..

    1. longlong <- string : stoll 이 있음.

64점짜리

#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;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보