본문으로 바로가기

[풀이 - Insertion Sort(Part_1)] : <Easy / 87.31%>

더보기
void insertionSort1(int n, vector<int> arr)
{
    if(n == 1)
    {
        cout << arr[0] << endl;
        return;
    }
    
    int value = arr[n - 1];
    int idx = n - 2;
    //
    while(true)
    {
        if(arr[idx] > value)
        {
            // copy value
            arr[idx+1] = arr[idx];
            { // Print Arr
                for(int i = 0; i < n; ++i)
                    cout << arr[i] << " ";
                cout << endl;
            }
            //
            if(idx >= 0)
            {
                --idx;
                continue;
            }
        }
        else
        {
            arr[idx+1] = value;
            { // Print Arr
                for(int i = 0; i < n; ++i)
                    cout << arr[i] << " ";
                cout << endl;
            }
            return;
        }
    }
}

 


[풀이 - Strong Password] : <Easy / 84.55%>

더보기
int minimumNumber(int n, string password)
{
    int result = 0;
    /* Condition for Strong Password
      1. length >= 6
      2. digit >= 1
      3. lowercase >= 1
      4. uppercase >= 1
      5. special >= 1 */
    map<int, int> m;
    // 0 : lower, 1 : upper, 2 : digit, 3 : special
    for(int i = 0; i < n; ++i)
    {
        char c = password[i];
        //
        if('a' <= c && c <= 'z')
            m[0]++;
        else if('A' <= c && c <= 'Z')
            m[1]++;
        else if('0' <= c && c <= '9')
            m[2]++;
        else // special
            m[3]++;
    }
    for(int i = 0; i < 4; ++i)
    {
        if(m[i] == 0)
            ++result;
    }
    int countAfter = n + result;
    if(countAfter < 6)
        result += (6 - countAfter);
    
    return result;
}

 


[풀이 - Two Characters] : <Easy / 76.74%>

더보기
bool isAlternating(string s)
{
    for(int i = 0; i < s.size() - 1; ++i)
        if(s[i] == s[i+1])
            return false;
    //
    return true;
}
//
void removeCharInString(string& s, char c)
{
    s.erase( remove(s.begin(), s.end(), c), s.end() );
}
//
int alternate(string s)
{
    int n = s.size();
    if(n == 1)
        return 0;
    // 0. seperate string to char
    map<char, int> m;
    for(int i = 0; i < n; ++i)
        m[s[i]]++;
    //
    if(m.size() == 1)
        return 0;
    // 
    vector<char> v;
    auto iter = m.begin(), end = m.end();
    for(; iter != end; ++iter)
        v.push_back(iter->first);
        
    // array for store alternating lengths
    vector<int> arrLength;
        
    // 1-1. make temp Array(0, 0..., 1, 1...) for choice to delete(nCk)
    vector<int> temp;
    for(int i = 0; i < 2; ++i)
        temp.push_back(0);
    for(int i = 0; i < m.size() - 2; ++i)
        temp.push_back(1);
    // 1. make choice to delete(nCk)
    do
    {
        string s_copy = s;
        // 2. remove choice from s(copy)
        for(int i = 0; i < temp.size(); ++i)
            if(temp[i] == 1)
                removeCharInString(s_copy, v[i]);
        // 3. check is alternating
        if(isAlternating(s_copy))
            arrLength.push_back(s_copy.length());
    } while (next_permutation(temp.begin(), temp.end()));
    // 4. compare size
    sort(arrLength.begin(), arrLength.end(), greater<int>());
    
    if(arrLength.size() == 0)
        return 0;
    else
        return arrLength[0];
}