문제 (요약)
주어진 문자열이 다음의 조건을 만족하려면 최소 몇 글자가 더 필요한지 구하여라.
- 6자 이상으로 구성
- 1자 이상의 숫자 포함
- 1자 이상의 영소문자 포함
- 1자 이상의 영대문자 포함
- 1자 이상의 특수문자(
!@#$%^&*()-+
) 포함
예시 1)Ab1
은 1개의 특수문자를 포함한 3글자($hk
와 같은)를 추가하면 조건을 만족합니다.
풀이
각 종류별 글자가 포함되어 있는지 확인하여 미 포함시 1글자씩 추가합니다. 해당 상태에서 문자열의 길이가 6글자가 이하인 경우는 6글자가 되도록 보충하고, 그 외의 경우는 추가한 글자 수를 포함합니다.
#include <bits/stdc++.h>
using namespace std;
bool isNum(char c) {
if ('0' <= c && c <= '9') {
return true;
} else {
return false;
}
}
bool isUpper(char c) {
if ('A' <= c && c <= 'Z') {
return true;
} else {
return false;
}
}
bool isLower(char c) {
if ('a' <= c && c <= 'z') {
return true;
} else {
return false;
}
}
bool isSpecial(char c) {
// special_characters = "!@#$%^&*()-+";
if ('!' == c ||
'@' == c ||
'#' == c ||
'$' == c ||
'%' == c ||
'^' == c ||
'&' == c ||
'*' == c ||
'(' == c ||
')' == c ||
'-' == c ||
'+' == c) {
return true;
} else {
return false;
}
}
// Complete the minimumNumber function below.
int minimumNumber(int n, string password) {
// Return the minimum number of characters to make the password strong
int num = 0;
bool flag = false;
// 최소 한자 이상의 숫자 필요
for (int i=0;i<n;i++) {
flag = isNum(password[i]);
if (flag == true)
break;
}
if (flag == false) {
num += 1;
} else {
flag = false;
}
// 최소 한자 이상의 대문자 필요
for (int i=0;i<n;i++) {
flag = isUpper(password[i]);
if (flag == true)
break;
}
if (flag == false) {
num += 1;
} else {
flag = false;
}
// 최소 한자 이상의 소문자 필요
for (int i=0;i<n;i++) {
flag = isLower(password[i]);
if (flag == true)
break;
}
if (flag == false) {
num += 1;
} else {
flag = false;
}
// 최소 한자 이상의 특수문자 필요
for (int i=0;i<n;i++) {
flag = isSpecial(password[i]);
if (flag == true)
break;
}
if (flag == false) {
num += 1;
} else {
flag = false;
}
// 최소 6 글자 이상으로 구성
if (n + num < 6) {
return 6 - n;
} else {
return num;
}
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
int n;
cin >> n;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
string password;
getline(cin, password);
int answer = minimumNumber(n, password);
fout << answer << "\n";
fout.close();
return 0;
}
출처
'알고리즘 트레이닝 > Hackers Rank' 카테고리의 다른 글
Maximum Element (0) | 2019.10.09 |
---|---|
HackerRank - The Bomberman Game (0) | 2018.06.16 |
HackerRank - 3D Surface Area (0) | 2018.06.12 |
HackerRank - Halloween Sale (0) | 2018.06.12 |