[HackerRank/C++] Strong Password
2023. 2. 8. 09:05ㆍ코딩테스트 해커랭크/Algorithms -Easy
루이즈는 특정 사이트에 가입하기 위해 비밀번호를 만든다
강력한 비밀번호의 조건은 다음과 같다
최소 6글자 이상의 비밀번호여야 하며,
영문 소문자, 대문자, 숫자, 특수문자를 하나씩 포함해야 한다
이때 인자로 받는 문자열 password가 강력한 비밀번호가 되려면 최소 몇개의 문자열이 추가되어야 하는지 return 한다
int minimumNumber(int n, string password)
{
bool num = false;
bool sma = false;
bool big = false;
bool spc = false;
string sWord = "!@#$%^&*()-+";
for (int i = 0; i < password.size(); ++i)
{
if (!num && '0' <= password[i] && password[i] <= '9')
num = true;
else if (!sma &&'a' <= password[i] && password[i] <= 'z')
sma = true;
else if (!big &&'A' <= password[i] && password[i] <= 'Z')
big = true;
else if (!spc)
for (int j = 0; j < sWord.size(); ++j)
if (password[i] == sWord[j])
{
spc = true;
break;
}
}
int result = 6 - password.size();
int addWord = 0;
if (!num)
++addWord;
if (!sma)
++addWord;
if (!big)
++addWord;
if (!spc)
++addWord;
return result > addWord ? result : addWord;
}
각 문자열 종류가 존재하는지 확인할 bool 변수 4개를 선언한다
원소를 탐색하며 각각 해당 글자가 어느 문자열에 속하는지 확인하고, 각각의 종류라면 해당 종류의 bool 값을 true로 바꾼다
if 조건의 맨 처음으로 bool값의 조건을 넣어 이미 존재하는 문자열이라면 뒤의 조건식은 체크하지 않는다
숫자, 소문자, 대문자는 ascii 코드값이 순차적으로 배열되어 있기 때문에 크기 비교로 쉽게 확인이 가능하지만 특수문자는 그렇지 않다
따라서 string sWord를 선언하고 원소를 해당하는 특수문자로 채운다
특수 문자는 해당 문자가 sWord에 있는 문자열과 같은지 비교해 존재하는지 확인한다
원소의 탐색이 끝나면 6글자에 몇글자가 부족한지를 먼저 확인하고, 부족한 문자열의 종류가 몇 종류인지 확인한다
이 중 더 큰값이 필요한 문자수이므로 해당 값을 return 한다
'코딩테스트 해커랭크 > Algorithms -Easy' 카테고리의 다른 글
| [HackerRank/C++] Mars Exploration (0) | 2023.03.02 |
|---|---|
| [HackerRank/C++] Caesar Cipher (0) | 2023.03.02 |
| [HackerRank/C++] CamelCase (0) | 2023.02.08 |
| [HackerRank/C++] Super Reduced String (0) | 2023.02.08 |
| [HackerRank/C++] Big Sorting (0) | 2023.02.08 |