[풀이 - 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];
}